Dans le domaine de la programmation Go, l'interface{} règne comme un type de données polyvalent mais énigmatique. Pour naviguer dans ses subtilités, il est important d'approfondir ses capacités et de trouver des réponses aux énigmes courantes.
Dévoilement du "vrai" type d'interface{}
Pour déterminer le vraie nature d'une valeur d'interface{}, vous pouvez utiliser des assertions de type :
w := weirdFunc(5) if tmp, ok := w.(int); ok { fmt.Println("w is of type int") }
Cette instruction conditionnelle vérifie si la la valeur w peut être transtypée en un entier. Si la conversion réussit, cela signifie que w contient effectivement une valeur entière sous-jacente.
Obtention d'une représentation sous forme de chaîne de type
Go fournit un mécanisme élégant pour récupérer la chaîne représentation d'un type appelé Type.Name :
fmt.Printf("Type of w: %T", w)
Dans cet exemple, la sortie serait "int", révélant la représentation sous forme de chaîne du type int cette valeur d'interface {} w encapsule actuellement.
Conversion à l'aide de la représentation sous forme de chaîne d'un type
Malheureusement, Go n'offre aucun moyen direct d'utiliser la représentation sous forme de chaîne d'un type pour la valeur conversion. Cependant, vous pouvez tirer parti de la réflexion pour obtenir cette fonctionnalité :
wt := reflect.TypeOf(w) switch wt.Name() { case "int": newValue := reflect.New(wt).Elem().Interface() _ = newValue.(int) // type assertion to use newValue }
Dans cet extrait, la réflexion est utilisée pour récupérer la définition du type et créer une nouvelle valeur de ce type. L'assertion de type est ensuite utilisée pour convertir la valeur de l'interface{} en son type sous-jacent.
En maîtrisant ces techniques, les développeurs peuvent exploiter efficacement la puissance de l'interface{} et libérer sa polyvalence dans un large éventail de programmation Go. scénarios.
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!