


Warum gibt Golang Reflect.MakeSlice einen nicht adressierbaren Wert zurück?
Diese Frage ergibt sich aus der Notwendigkeit, eine Slice-Adresse zur Verwendung in einer Funktion zu erstellen, die a akzeptiert Zeiger auf ein Slice.
Warum gibt Reflect.MakeSlice einen nicht adressierbaren Wert zurück?
Eine lose Definition der Adressierbarkeit in Go ist, dass man die Adresse von etwas übernehmen kann und garantiert ist, dass dies der Fall ist Die Adresse verweist auf einen sinnvollen Ort. Wenn Sie im Hauptteil einer Funktion etwas auf dem Stapel zuweisen, ist die Adresse des zugewiesenen Werts irgendwann nicht mehr zugänglich. Daher ist dieser Wert nicht adressierbar.
In den meisten Fällen verschiebt Go lokale Stack-Variablen auf den Heap, wenn sie zurückgegeben oder auf andere Weise nach außen befördert werden, zur Laufzeit geschieht dies jedoch nicht. Daher gibt CanAddr() nur dann „true“ zurück, wenn:
A value is addressable if it is an element of a slice, an element of an addressable array, a field of an addressable struct, or the result of dereferencing a pointer.
Die angegebenen Typen haben alle eines gemeinsam: Sie garantieren, dass das, was sie enthalten, von überall aus zugänglich ist und auf einen sinnvollen Wert im Speicher verweist. Sie haben weder ein Slice-Element noch einen Zeiger oder eines der anderen genannten Dinge, seit Sie mit Reflect.MakeSlice ein lokales Slice erstellt haben. Die Elemente dieses Slice wären jedoch adressierbar (da sich der Speicher des Slice auf dem Heap befindet).
So erhalten Sie mithilfe von Reflection einen Zeiger auf ein Slice
Die einfachste Lösung ist wahrscheinlich die Verwendung von Reflect .New() zum Erstellen des Zeigers (vollständiges Beispiel im Spiel):
my := &My{} // Create a slice to begin with myType := reflect.TypeOf(my) slice := reflect.MakeSlice(reflect.SliceOf(myType), 10, 10) // Create a pointer to a slice value and set it to the slice x := reflect.New(slice.Type()) x.Elem().Set(slice) collection.Find(bson.M{}).All(x.Interface())
Beachten Sie die x.Interface(), auf die auch in anderen Antworten hingewiesen wurde. Dies verhindert, dass anstelle des Reflect.Value der tatsächliche Wert von x an All() übergeben wird.
Das obige ist der detaillierte Inhalt vonWarum gibt „reflect.MakeSlice' einen nicht adressierbaren „Wert' zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

GoroutinesareFunctionsOrtheThatrunConcruncurentoingo, aktivieren, dass und leuchtet die Wutzehnung

ThepurpleTheinitfunctioningoinitializeVariables, Setupconfigurationen, orperformN -nötiger SetupBeforeThemaNFunctionexecutes

GointerfacesAremethodSignaturesSetShattypesMustImplement, EnablingPolymorphism mit der Outinheritanceforcleaner, modularCode.

Verwenden Sie die Funktion resocal (), um sich von Panik zu erholen. Die spezifischen Methoden sind: 1) Verwenden Sie Recover (), um Panik in der Aufschubfunktion zu erfassen, um Programmabstürze zu vermeiden. 2) detaillierte Fehlerinformationen zum Debuggen aufzeichnen; 3) entscheiden, ob die Programmausführung auf der Grundlage der spezifischen Situation wieder aufgenommen werden soll; 4) Verwenden Sie mit Vorsicht, um die Leistung zu vermeiden.

In dem Artikel werden mit dem "Strings" -Paket von Go für String -Manipulationen untersucht, in denen gemeinsame Funktionen und Best Practices beschrieben werden, um die Effizienz zu verbessern und Unicode effektiv zu verarbeiten.

Die Artikeldetails mit dem "Crypto" -Paket von GO für kryptografische Operationen, Erörterung der wichtigsten Generation, des Managements und der Best Practices für die sichere Implementierung.Character Count: 159

Der Artikel beschreibt die Verwendung von GO's "Time" -Paket zum Umgang mit Daten, Zeiten und Zeitzonen, einschließlich der aktuellen Zeit, der Erstellung bestimmter Zeiten, der Parsen von Zeichenfolgen und der Messung der verstrichenen Zeit.

In Artikel wird das "Reflect" -Paket von GO zur variablen Inspektion und Änderung mithilfe von Methoden und Leistungsüberlegungen erläutert.


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

VSCode Windows 64-Bit-Download
Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

SecLists
SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

DVWA
Damn Vulnerable Web App (DVWA) ist eine PHP/MySQL-Webanwendung, die sehr anfällig ist. Seine Hauptziele bestehen darin, Sicherheitsexperten dabei zu helfen, ihre Fähigkeiten und Tools in einem rechtlichen Umfeld zu testen, Webentwicklern dabei zu helfen, den Prozess der Sicherung von Webanwendungen besser zu verstehen, und Lehrern/Schülern dabei zu helfen, in einer Unterrichtsumgebung Webanwendungen zu lehren/lernen Sicherheit. Das Ziel von DVWA besteht darin, einige der häufigsten Web-Schwachstellen über eine einfache und unkomplizierte Benutzeroberfläche mit unterschiedlichen Schwierigkeitsgraden zu üben. Bitte beachten Sie, dass diese Software

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Sicherer Prüfungsbrowser
Safe Exam Browser ist eine sichere Browserumgebung für die sichere Teilnahme an Online-Prüfungen. Diese Software verwandelt jeden Computer in einen sicheren Arbeitsplatz. Es kontrolliert den Zugriff auf alle Dienstprogramme und verhindert, dass Schüler nicht autorisierte Ressourcen nutzen.
