Maison  >  Article  >  développement back-end  >  Récepteurs de valeur ou de pointeur dans les interfaces Go : quand l'affectation d'interface échoue-t-elle ?

Récepteurs de valeur ou de pointeur dans les interfaces Go : quand l'affectation d'interface échoue-t-elle ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-19 15:02:02931parcourir

Value vs. Pointer Receivers in Go Interfaces: When Does Interface Assignment Fail?

Comprendre les méthodes de structure Go et la mise en œuvre de l'interface

Dans Go, les méthodes qui remplissent une interface peuvent être classées en deux types : les méthodes avec des récepteurs de valeur et des procédés avec des récepteurs de pointeurs. Cependant, lors de l'implémentation d'interfaces, l'assignabilité des valeurs à l'interface diffère des appels directs à la méthode struct.

Considérez l'extrait de code fourni :

type greeter interface {
    hello()
    goodbye()
}

L'interface greeter définit deux méthodes, bonjour et au revoir.

type tourGuide struct {
    name string
}

La structure tourGuide implémente le greeter interface.

func (t tourGuide) hello() {
    fmt.Println("Hello", t.name)
}

La méthode hello a un récepteur de valeur, qui permet d'invoquer directement la méthode à l'aide d'une variable de type tourGuide.

func (t *tourGuide) goodbye() {
    fmt.Println("Goodbye", t.name)
}

La méthode goodbye, en revanche, a une récepteur de pointeur, qui nécessite une variable de pointeur pour être invoqué.

Maintenant, examinons l'interface implémentation :

var g2 greeter = t2
g2.hello()   // Hello Smith
g2.goodbye() // Goodbye Smith

L'attribution d'une variable pointeur t2 de type *tourGuide à une valeur de récepteur de type interface greeter réussit car le récepteur pointeur permet l'acquisition de l'adresse de la valeur, qui est ensuite utilisée comme récepteur.

var g1 greeter = t1

Cependant, l'attribution d'une variable non-pointeur t1 de type tourGuide à une valeur de récepteur de type d'interface greeter échoue. En effet, une méthode avec un récepteur de pointeur nécessite un récepteur de pointeur et une valeur elle-même ne peut pas être directement utilisée comme pointeur.

Pour résumer, les méthodes avec des récepteurs de valeur peuvent être invoquées en utilisant soit une valeur, soit un pointeur, tandis que les méthodes avec des récepteurs de pointeurs ne peuvent être invoquées qu'à l'aide d'un pointeur. Lors de l'implémentation d'interfaces avec des méthodes dotées de récepteurs de pointeurs, il est crucial d'utiliser des pointeurs comme type sous-jacent.

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