Heim >Backend-Entwicklung >Golang >Wie ändere ich typbestätigte Schnittstellenabschnitte in Go?
Manipulation typbestätigter Slices von Schnittstellen in Go
In Golang ermöglicht die Typzusicherung Entwicklern den Zugriff auf den zugrunde liegenden konkreten Typ eines Schnittstellenwerts . Es ist jedoch wichtig zu beachten, dass die Typzusicherung den ursprünglichen Schnittstellenwert nicht ändert. Dies kann problematisch sein, wenn versucht wird, Elemente aus einem Typ-Asserted-Slice von Schnittstellen zu entfernen.
Betrachten Sie das folgende Beispiel:
value := []interface{}{0, "one", "two", 3, 4}
Wenn wir versuchen, ein Element mit dem aus dem Slice zu entfernen Typzusicherung:
i := 2 value.([]interface{}) = append(value.([]interface{})[:i], value.([]interface{})[i+1:]...)
Wir werden auf einen Fehler stoßen, der besagt: „Kann dem Wert nicht zugewiesen werden (Typ []Schnittstelle {})“. Dies liegt daran, dass durch die Typzusicherung eine Kopie des Originalwerts erstellt wird und an der Kopie vorgenommene Änderungen keinen Einfluss auf das Original haben.
Um dieses Problem zu beheben, ist es notwendig, einen zugrunde liegenden Abschnitt von Schnittstellen zu ändern, anstatt Typ- behauptete Kopien. Dies kann erreicht werden, indem das Slice in einen Schnittstellenzeiger eingeschlossen wird:
value := []*[]interface{}{&[]interface{}{0, "one", "two", 3, 4}}
Die Verwendung des Zeigers ermöglicht es uns, das zugrunde liegende Slice zu ändern:
sp := value[0] i := 2 *sp = append((*sp)[:i], (*sp)[i+1:]...)
In diesem Fall die vorgenommenen Änderungen an Die spitzen Slices spiegeln sich im ursprünglichen Schnittstellenwert wider:
fmt.Println(value) // Output: [*[]interface {0 one 3 4}]
Durch die Verwendung von Schnittstellenzeigern können Entwickler typbestätigte Slices von Schnittstellen manipulieren, ohne darauf zu stoßen Zuordnungsfehler.
Das obige ist der detaillierte Inhalt vonWie ändere ich typbestätigte Schnittstellenabschnitte in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!