2010-06-27 6 views
1

Après avoir lu la spécification, et la section "Effective Go" sur eux, je ne comprends toujours pas comment les interfaces fonctionnent dans Go.Comment fonctionnent exactement les interfaces dans Go?

Comme, où les définissez-vous? Comment l'application de l'interface fonctionne-t-elle? Et existe-t-il un moyen de spécifier quelque part qu'un objet implémente une interface, plutôt que de simplement définir les méthodes dans l'interface?

Excuses pour la question débutant; mais j'ai vraiment du mal à comprendre cela.

Répondre

3

Il ya quelques bons messages sur les interfaces sur Russ Cox et Ian Lance Taylor's blog que je recommande de vérifier. Ils couvriront probablement vos questions et plus ...

Je pense qu'un bon exemple conceptuel est le paquet net. Vous y trouverez une interface de connexion (Conn), qui est implémentée par le TCPConn, le UnixConn et le UDPConn. La source Go pkg est probablement la meilleure documentation pour la langue Go.

+0

Ces messages sont excellents. Merci pour les autres ressources aussi. –

+0

J'espère que vous apprécierez Go. Il y a aussi beaucoup de QA dans la liste de diffusion de go-nuts, qui est très active. –

3

Fondamentalement, vous définissez une interface comme ceci:

type InterfaceNameHere interface { 
    MethodA(*arg1, *arg2) 
    MethodB(*arg3) 
} 

Cette définition d'interface particulière nécessite tout ce qui implémente l'interface à la fois une méthode MethodA qui prend 2 arguments et une méthode MethodB qui prend 1 argument.

Une fois que vous l'avez défini, Go vérifie automatiquement lorsque vous essayez d'utiliser quelque chose où une certaine interface est requise, si la chose que vous utilisez satisfait cette interface. Vous n'avez pas besoin d'indiquer explicitement qu'une chose donnée satisfait une interface donnée, elle est simplement vérifiée automatiquement lorsque vous essayez d'utiliser quelque chose dans un scénario où il est prévu de le satisfaire.

+0

Où mettez-vous le type 'InterfaceType interface {...}' cependant? Dans votre paquet 'main'? –

+1

Où que vous envisagiez de l'utiliser - la portée fonctionne comme toute autre chose. – Amber

+0

Merci beaucoup, Amber. :) –

Questions connexes