Restrictions de conversion de type dans Go
Go applique des règles de saisie strictes, qui peuvent empêcher des conversions apparemment évidentes entre des tranches de types différents contenant le même sous-jacent éléments. Cette restriction est évidente dans le code suivant :
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) }
Malgré la similitude entre []string et []Card, le compilateur signale une erreur :
cannot use value (type []string) as type []Card in argument to NewHand
Raison d'être
La spécification de Go interdit cette conversion pour empêcher les conversions de types accidentelles entre des types non liés qui partagent par hasard le même structure.
Solutions
value := []string{"a", "b", "c"} cards := *(*[]Card)(unsafe.Pointer(&value)) firstHand := NewHand(cards)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!