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>
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!