Maison > Article > développement back-end > Introduction à l'utilisation de l'interface Go
Les interfaces Go sont utilisées très fréquemment dans la programmation Go, notamment l'utilisation d'interfaces vides. Grâce aux interfaces, le langage Go devient extrêmement puissant. La colonne Tutoriel du langage Go vous présentera l'utilisation de l'interface Go.
À propos du concept d'interface :
1. Une interface est un ensemble d'une ou plusieurs signatures de méthode
2. comme un certain type Avec toutes les signatures de méthode de l'interface, même si l'interface est implémentée, il n'est pas nécessaire d'afficher quelle interface est déclarée implémentée. C'est ce qu'on appelle le typage structurel
3. déclarations de méthode, pas d'implémentation et pas de champs de structure de données
4 Les interfaces peuvent être intégrées de manière anonyme dans d'autres interfaces, ou dans des interfaces
Quand un objet est copié dans une interface, une copie. se produira et l'interface stocke un pointeur vers la copie, c'est-à-dire que l'état de la réplique ne peut pas être modifié et que le pointeur ne peut pas être obtenu
6. Les appels d'interface ne convertiront pas automatiquement le récepteur
7. Les interfaces peuvent également implémenter un polymorphisme similaire à la POO
8. L'interface vide peut être utilisée comme conteneur pour tout type de données
Présentons maintenant l'interface la plus basique. Présentez le concept 2
package main import ( "fmt" ) type USB interface { // 定义一个USB接口 ,该接口拥有PhoneConnect的所有方法签名, Name() string //即就实现了PhoneConnect的接口,无需在声明。这就是上面说的第2条 Connect() } type PhoneConnect struct { //定义的结构体 name string } func (pc PhoneConnect) Name() string{ //上面结构体的方法 return pc.name } func (pc PhoneConnect) Connect(){ fmt.Println("Connectd to: ",pc.name) } func main(){ var a USB //声明该接口 a = PhoneConnect{"IPhone"} //该接口已经支持PhoneConnect这个结构体了。初始化该结构体 a.Connect() //调用该结构体的Connect方法 }
Si vous comprenez l'exemple ci-dessus, continuez à lire.
Définissez une autre fonction pour recevoir des paramètres de type USB. Passez un appel. En fait, un peut déjà appeler toutes les méthodes de phoneConnect. Et à ce moment-là, j'ai fait une déclaration un peu vague.
func Disconnect(usb USB){ fmt.Println("Discounnectd from:",usb.Name()) } func main(){ a := PhoneConnect{"IPhone"} //a是什么类型呢? fmt.Println("type:",reflect.TypeOf(a)) Disconnect(a) }
Regardez les résultats en cours d'exécution :
type : main.PhoneConnect
Discounnectd from : IPhone
a est une structure de type PhoneConnect instanciée , mais la fonction Déconnexion nécessite la réception d'une donnée de type USB, une peut être transmise ! ! !
Jetons un coup d'œil au concept 7 :
type USB interface { // 定义一个USB接口 ,该接口拥有PhoneConnect的所有方法签名, Name() string // Connect //嵌入了一个Connect接口,效果和最开始演示的是一样的 } type Connect interface { Connect() }
Ensuite, toute structure qui satisfait aux méthodes Name() et Connect() peut être considérée comme une clé USB. Y a-t-il un problème ? Que se passe-t-il si la clé USB que je transmets à la fonction DisConnect() n'est pas un téléphone mobile ? ? Utilisez simplement un modèle ok. Par exemple, j'ajoute une structure TV, et le téléviseur dispose également d'une interface USB.
type TVConnect struct { name string } func (tc TVConnect) Name() string{ return tc.name } func (tc TVConnect) Connect() { fmt.Println("Connect to: ",tc.name) } func Disconnect(usb USB){ if rs,ok := usb.(PhoneConnect);ok{ fmt.Println("Disconnect: ",rs.name) }else{ fmt.Println("Unknown device: ") } } func main(){ a := PhoneConnect{"IPhone"} b := TVConnect{"ChuangWei"} Disconnect(a) Disconnect(b) }
Regardez le résultat imprimé :
Déconnecter : IPhone
Périphérique inconnu :
b est une interface USB de Skyworth TV , mais b n'est pas reconnu dans la fonction Déconnexion car il s'agit d'un téléviseur.
Avancé à nouveau. Puisque vous pouvez déterminer la structure des données entrantes dans la fonction Déconnecter, vous n'avez plus à vous soucier du type d'interface USB. Définissez-le directement comme une interface vide. Sinon, c’est fini. Quoi qu’il en soit, j’essaie de déterminer quel type vous êtes dans la fonction.
func Disconnect(usb interface{}){ //注意,这里是空接口 switch v:=usb.(type) { case PhoneConnect: fmt.Println(" Phone device Disconnected from",v.name) case TVConnect: fmt.Println("TV device Disconnected from",v.name) default: fmt.Println("Unknown device ...") } } func main(){ a := PhoneConnect{"IPhone"} b := TVConnect{"ChuangWei"} Disconnect(a) Disconnect(b) }
Regardez la situation d'impression :
Appareil téléphonique : Déconnecté de l'iPhone
Appareil TV : Déconnecté de ChuangWei
Plus Pour connaître le langage Go, veuillez faire attention à la colonne Go Language Tutorial sur le site Web PHP chinois.
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!