Maison > développement back-end > Golang > le corps du texte

Introduction à l'utilisation de l'interface Go

Libérer: 2020-02-17 17:17:55
avant
2755 Les gens l'ont consulté

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.

Introduction à 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方法
}
Copier après la connexion

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)
}
Copier après la connexion

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()
}
Copier après la connexion

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)
}
Copier après la connexion

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)
}
Copier après la connexion

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!

Étiquettes associées:
go
source:csdn.net
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal