Casting d'un pointeur de structure vers une interface dans Go
Dans Go, il est souvent nécessaire de convertir des valeurs de différents types en interfaces. Les interfaces sont une fonctionnalité puissante qui permet le polymorphisme des types, permettant au code de fonctionner avec différents types sans vérifier explicitement leurs types spécifiques.
Considérez le code suivant :
type foo struct{} func bar(baz interface{}) { // Do something with baz }
Dans cet exemple, nous avoir une structure foo et une barre de fonctions qui accepte un paramètre de type interface{}. Notre objectif est de passer un pointeur vers une structure foo comme paramètre à bar.
Pour y parvenir, nous pouvons simplement lancer le pointeur en utilisant la syntaxe d'assertion de type :
f := &foo{} bar(f) // Cast &f to an interface{}
Cependant, après le casting, nous devrons peut-être accéder au pointeur de structure foo d'origine à l'intérieur de la fonction bar. Pour ce faire, nous pouvons utiliser soit une assertion de type, soit un commutateur de type :
Assertion de type :
func bar(baz interface{}) { f, ok := baz.(*foo) if !ok { // Handle the case where baz is not a pointer to a foo struct } // Use f as a *foo pointer }
Commutateur de type :
func bar(baz interface{}) { switch f := baz.(type) { case *foo: // Use f as a *foo pointer default: // Handle other cases } }
En utilisant ces techniques, nous pouvons travailler de manière transparente à la fois avec l'interface et le pointeur de structure d'origine, offrant ainsi flexibilité et sécurité de frappe dans notre code.
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!