"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Pourquoi est-ce que j'obtiens « interface sans méthodes » lorsque j'accède à une structure anonyme dans Go ?

Pourquoi est-ce que j'obtiens « interface sans méthodes » lorsque j'accède à une structure anonyme dans Go ?

Publié le 2024-11-22
Parcourir:150

Why do I get \

Comprendre "l'interface sans méthodes" dans Go

Dans votre code, vous avez rencontré l'erreur "type interface {} est une interface sans méthodes" lorsque vous essayez d'accéder à un champ à partir d'une structure anonyme passée à une fonction. Pour comprendre cette erreur, il est essentiel de saisir le concept d'interface dans Go.

Une interface dans Go est un type qui définit un ensemble de méthodes qu'un type concret doit implémenter. Cependant, dans votre cas, l'interface que vous utilisez est une "interface vide" désignée par interface {}. Une interface vide n'a aucune méthode et peut contenir des valeurs de n'importe quel type, ce qui en fait un type universel.

Accédez au champ de structure anonyme

Pour accéder aux champs de la structure anonyme transmise à NewJob, vous devez la saisir avec un type compatible avant de pouvoir accéder à ses champs. L'assertion de type vous permet de convertir l'interface vide en un type concret spécifique.

Le code corrigé

id := v.(struct{Id int}).Id

Dans ce code corrigé, nous tapons assert l'interface v à une structure avec un champ Id. Cela nous permet d'accéder au champ Id et le programme s'exécutera comme prévu.

N'oubliez pas que l'assertion de type doit être utilisée judicieusement car elle peut entraîner des erreurs d'exécution si l'assertion de type échoue.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3