Warum kann ich die Adresse eines in einer Go-Schnittstelle gespeicherten Werts nicht abrufen?

Linda Hamilton
Freigeben: 2024-11-02 09:16:02
Original
882 Leute haben es durchsucht

 Why Can't I Get the Address of a Value Stored in a Go Interface?

Werte innerhalb einer Schnittstelle adressieren

Der Versuch, die Adresse eines in einer Schnittstelle gespeicherten Werts abzurufen, führt oft zu Fehlern wie „kann nicht“. nimm die Adresse von el.Value.(retry)". Um diese Einschränkung zu verstehen, müssen wir die Natur von Schnittstellenvariablen untersuchen.

Eine Schnittstellenvariable besteht aus zwei Teilen: Einer beschreibt den Typ des enthaltenen Werts und der andere speichert den Wert entweder direkt oder enthält einen Zeiger darauf Lagerung. Der in einer Schnittstelle gespeicherte Wert gehört der Schnittstellenvariablen selbst. Darüber hinaus kann der Speicher für diesen Wert wiederverwendet werden, wenn der Schnittstelle ein neuer Wert zugewiesen wird.

Als Beispiel:

<code class="go">var v interface{}
v = int(42)
p := GetPointerToInterfaceValue(&v) // a pointer to an integer holding 42
v = &SomeStruct{...}</code>
Nach dem Login kopieren

In diesem Szenario beträgt der Speicher, der zum Speichern der Ganzzahl verwendet wird umfunktioniert, um einen Zeiger zu halten, wodurch der Wert bei *p eine ungültige ganzzahlige Darstellung des neuen Zeigers wird. Dieses Verhalten könnte leicht das Typsystem untergraben. Aus diesem Grund bietet Go keine direkte Möglichkeit, Adressen von Schnittstellenwerten zu erhalten (außer bei Verwendung des unsicheren Pakets).

Wenn Sie Zeiger auf in gespeicherte Strukturen benötigen Wenn Sie beispielsweise eine Liste erstellen möchten, sollten Sie erwägen, Zeiger auf die Strukturen selbst statt auf die Strukturen direkt zu speichern. Alternativ können Sie *list.Element-Werte als Referenzen auf die enthaltenen Strukturen verwenden.

Das obige ist der detaillierte Inhalt vonWarum kann ich 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!

Quelle:php.cn
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
Neueste Artikel des Autors
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!