Werte innerhalb von Schnittstellen adressieren
Um zu verstehen, warum es nicht möglich ist, die Adresse eines in einer Schnittstelle gespeicherten Werts zu übernehmen, ist dies von entscheidender Bedeutung sich mit der Natur einer Schnittstellenvariablen zu befassen. Ein Schnittstellenwert besteht im Wesentlichen aus zwei Komponenten:
Zwei wichtige Aspekte, die es zu beachten gilt:
Beachten Sie den folgenden Codeausschnitt:
<code class="go">var v interface{} v = int(42) p := GetPointerToInterfaceValue(&v) // a pointer to an integer holding 42 v = &SomeStruct{...}</code>
In diesem Szenario wird der Speicher, der zuvor die Ganzzahl enthielt, zum Speichern eines Zeigers umfunktioniert. Infolgedessen liefert die Dereferenzierung von *p nun die numerische Darstellung des Zeigers.
Um eine Gefährdung des Typsystems zu verhindern, schränkt Go diese Art des Zeigerabrufs absichtlich ein (abgesehen von der Verwendung unsicherer Pakete).
Alternative Lösungen
Wenn Sie auf Zeiger von in einer Liste gespeicherten Strukturen zugreifen möchten, ziehen Sie diese Alternativen in Betracht:
Das obige ist der detaillierte Inhalt vonWarum können Sie die Adresse eines in einer Go-Schnittstelle gespeicherten Werts nicht abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!