Maison >développement back-end >Golang >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 ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-04 04:23:01885parcourir

Why do I get

Comprendre "l'interface sans méthode" 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'interfaces 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é

<code class="go">id := v.(struct{Id int}).Id</code>

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.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn