Heim >Backend-Entwicklung >Golang >Warum kann ich in Go nicht direkt zwischen Slices verschiedener Typen konvertieren?
Typkonvertierungseinschränkungen in Go
Go erzwingt strenge Typisierungsregeln, die scheinbar offensichtliche Konvertierungen zwischen Slices unterschiedlicher Typen, die denselben zugrunde liegenden Typ enthalten, verhindern können Elemente. Diese Einschränkung wird im folgenden Code deutlich:
package main import "fmt" type Card string type Hand []Card func NewHand(cards []Card) Hand { hand := Hand(cards) return hand } func main() { value := []string{"a", "b", "c"} firstHand := NewHand(value) fmt.Println(firstHand) }
Trotz der Ähnlichkeit zwischen []string und []Card meldet der Compiler einen Fehler:
cannot use value (type []string) as type []Card in argument to NewHand
Begründung
Die Go-Spezifikation verbietet diese Konvertierung, um versehentliche Typkonvertierungen zwischen nicht verwandten Typen zu verhindern, die zufällig dasselbe gemeinsam haben Struktur.
Lösungen
value := []string{"a", "b", "c"} cards := *(*[]Card)(unsafe.Pointer(&value)) firstHand := NewHand(cards)
Das obige ist der detaillierte Inhalt vonWarum kann ich in Go nicht direkt zwischen Slices verschiedener Typen konvertieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!