Valider si une valeur est conforme à une interface spécifiée est un aspect crucial de la programmation Go. Cette question se pose lorsque le type de la valeur est inconnu, nécessitant une vérification dynamique.
Dans l'extrait de code fourni, la variable val est une instance de la chaîne MyType, qui ne n'implémente pas directement l'interface Somether. Pour vérifier dynamiquement le type, utilisez une assertion de type :
_, ok := val.(Somether)
Cette assertion tente de convertir la valeur val en l'interface Somether. La variable ok indique si la conversion a réussi (vrai) ou non (faux). Cependant, cette approche nécessite que la valeur soit un type d'interface, ce qui n'est pas toujours le cas.
Une méthode plus explicite consiste à intégrer l'interface souhaitée dans le type de la valeur :
var _ Somether = (*MyType)(nil)
Cette syntaxe attribue un pointeur nul du type valeur à une variable d'interface. Si le type valeur implémente l’interface, le code sera compilé sans erreur. Sinon, le compilateur générera une erreur.
Par exemple, dans ce cas :
func (mt MyType) Method() bool { return true }
Le type MyType implémente la méthode de l'interface Somether. Par conséquent, le code suivant sera compilé et ne fera rien :
var _ Somether = (*MyType)(nil)
En général, il est préférable d'utiliser des vérifications au moment de la compilation pour garantir que les valeurs implémentent les interfaces au moment de la compilation plutôt que de compter sur des vérifications dynamiques au moment de l'exécution. Les vérifications au moment de la compilation offrent une sécurité de type plus forte et peuvent éviter des erreurs imprévues.
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!