Maison > Article > développement back-end > Voici quelques options de titre, jouant avec le \'Pourquoi\' et le 'Comment\' de l'erreur : Accent sur le « Pourquoi » * Pourquoi mon code Go renvoie-t-il un \'ne peut pas être utilisé... comme type St
Message d'erreur :
cannot use &f (type *Bar) as type StringerGetter in argument to Printer: *Bar does not implement StringerGetter (wrong type for GetStringer method) have GetStringer() *Foo want GetStringer() fmt.Stringer
Dans Go, les méthodes d'interface reposent sur correspondance exacte du type. Cela signifie qu'une fonction renvoyant une interface doit avoir exactement le même type dans l'interface et dans son implémentation. S'ils ne correspondent pas, Go générera une erreur de compilation.
Dans ce cas, votre interface StringerGetter spécifie une méthode GetStringer() qui renvoie un fmt.Stringer. Cependant, l'implémentation de GetStringer() par votre type concret Bar renvoie un pointeur vers une structure Foo, qui n'est pas un fmt.Stringer. Cette incompatibilité provoque l'erreur de compilation.
Solutions :
Implémenter l'interface exactement :
Enveloppez le type concret dans un nouveau type :
Utiliser l'assertion :
Considérations importantes :
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!