Der Tierarzt meldet „Möglicher Missbrauch von Reflect.SliceHeader'

WBOY
Freigeben: 2024-02-11 12:09:24
nach vorne
1061 Leute haben es durchsucht

Go vet 报告“可能滥用reflect.SliceHeader”

PHP-Redakteur Zimo bringt Ihnen heute Neuigkeiten zum Go-Veterinärbericht. Kürzlich gab der Verantwortliche der Go-Sprache eine Warnung heraus, dass es zu einem Missbrauch von „reflect.SliceHeader“ kommen könnte. Go vet ist ein statisches Analysetool in der Go-Sprache, mit dem häufige Fehler und potenzielle Probleme im Code überprüft werden. Der Bericht rät Entwicklern, bei der Verwendung von „reflect.SliceHeader“ vorsichtig zu sein, um potenzielle Probleme zu vermeiden. In diesem Artikel werden wir dieses Problem im Detail erläutern und entsprechende Lösungen anbieten.

Frageinhalt

Ich habe den folgenden Codeausschnitt und „go vet“ beschwert sich über die Warnung „Möglicher Missbrauch von Reflect.sliceheader“. Ich kann keine weiteren Informationen zu dieser Warnung finden. Nachdem ich das gelesen habe, bin ich mir nicht ganz sicher, was getan werden muss, damit ich glücklich zum Tierarzt gehe – und keine möglichen Probleme mit der Blutzuckerkontrolle habe.

Das Ziel dieses Codeausschnitts besteht darin, dass die Go-Funktion Daten in den Speicher kopiert, der von der undurchsichtigen C-Bibliothek verwaltet wird. Die Go-Funktion benötigt ein []Byte als Parameter.

func Callback(ptr unsafe.Pointer, buffer unsafe.Pointer, size C.longlong) C.longlong {
        ...
        sh := &reflect.SliceHeader{
                Data: uintptr(buffer),
                Len:  int(size),
                Cap:  int(size),
        }
        buf := *(*[]byte)(unsafe.Pointer(sh))
        err := CopyToSlice(buf)
        if err != nil {
           log.Fatal("failed to copy to slice")
        }
        ...
}
Nach dem Login kopieren

Workaround

Es sieht so aus, als hätte Jimb (aus den Kommentaren) auf die richtigste Antwort hingewiesen, obwohl er sie nicht als Antwort gepostet oder ein Beispiel beigefügt hat. Das Folgende besteht vet, staticcheck und golangci-lint – und verursacht keine Segfaults, daher denke ich, dass dies die richtige Antwort ist.

func Callback(ptr unsafe.Pointer, buffer unsafe.Pointer, size C.longlong) C.longlong {
        ...
        buf := unsafe.Slice((*byte)(buffer), size)
        err := CopyToSlice(buf)
        if err != nil {
           log.Fatal("failed to copy to slice")
        }
        ...
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonDer Tierarzt meldet „Möglicher Missbrauch von Reflect.SliceHeader'. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!