Warum Schnittstellen mit Nicht-Zeigerwerten in Go nicht adressierbar sind
Golangs Schnittstellendokumentation legt nahe, dass gespeicherte Werte innerhalb von Schnittstellen nicht adressierbar sind auf Elemente in einer Karte. Dies wirft die Frage auf, warum Schnittstellenwerte nicht adressierbar sind.
tl;dr: Aufrechterhaltung der Typintegrität
Um die Typintegrität zu bewahren, werden Nicht-Zeigerwerte in Schnittstellen gespeichert sind nicht ansprechbar. Stellen Sie sich einen Zeiger (*A) vor, der auf einen Wert vom Typ A innerhalb einer Schnittstelle zeigt. Wenn anschließend ein anderer Typ (z. B. B) in der Schnittstelle gespeichert würde, würde der Zeiger auf A ungültig werden, was die Typsicherheit gefährden würde.
Adressierungsauswirkungen
Bei Schnittstelle Wenn Werte adressierbar wären, würde dies zu unerwarteten Effekten führen. Beispielsweise würde bei einer Schnittstelle I, zwei Typen A und B, die I implementieren, und einem gespeicherten A in einer I-Instanz die Übernahme der Adresse des gespeicherten Werts Änderungen am ursprünglichen Wert über diese Adresse ermöglichen. Wenn jedoch ein anderer Wert B in I gespeichert wird, würde der Zeiger auf den ursprünglichen A-Wert ungültig.
Zeigervorbehalt
Nicht-Zeiger-Schnittstellenwerte hingegen nicht adressierbar, ist es möglich, durch explizites Casting einen Zeiger auf eine Kopie des Werts zu erhalten, z. B. var a2 A = i.(A) gefolgt von var aPtr *A = &a2.
Fazit
Die Nichtadressierbarkeit von Schnittstellenwerten stellt die Typintegrität sicher, indem ungültige Zeigerreferenzen verhindert werden, wenn Werte unterschiedlichen Typs in der Schnittstelle gespeichert werden.
Das obige ist der detaillierte Inhalt vonWarum sind Nicht-Zeigerwerte in Go-Schnittstellen nicht adressierbar?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!