Maison  >  Article  >  développement back-end  >  Qu’est-ce qu’un récepteur en langage Go ?

Qu’est-ce qu’un récepteur en langage Go ?

PHPz
PHPzoriginal
2023-06-10 11:06:061696parcourir

Dans le langage Go, un récepteur fait référence à un paramètre qui existe en tant que paramètre d'une méthode. Chaque méthode aura un récepteur. La combinaison de récepteurs et de méthodes est en fait la manière dont la programmation orientée objet est implémentée dans le langage Go.

Le récepteur est généralement utilisé comme premier paramètre de la méthode. Il a son propre type, qui peut être un type pointeur ou un type non-pointeur. Les récepteurs de type pointeur sont principalement utilisés pour modifier la variable pointée par le récepteur, tandis que les récepteurs de type non-pointeur sont principalement utilisés pour transférer des types de valeurs.

Il est à noter que lors de l'appel de la méthode, le récepteur doit être du même type que la valeur passée dans la méthode. S'il s'agit d'un récepteur de type pointeur, la valeur correspondante doit également être de type pointeur et s'il s'agit d'un récepteur de type non-pointeur, la valeur correspondante doit également être de type non-pointeur ;

Par exemple, supposons que nous définissions une structure comme suit :

type User struct{
    name string
    age int
}

Maintenant, nous voulons définir une méthode pour que cette structure imprime les informations utilisateur. On peut définir la méthode suivante :

func (u User) PrintInfo(){
    fmt.Printf("name: %s, age: %d", u.name, u.age)
}

A ce stade, on peut imprimer les informations de l'utilisateur en appelant la méthode PrintInfo :

user := User{"Jack", 18}
user.PrintInfo()  // 输出:name: Jack, age: 18

Le type de récepteur u est User, ce qui signifie que la méthode appartient à la structure User. Dans la définition de la méthode, nous accédons aux variables membres de la structure via u.name et u.age. Enfin, lorsque nous appelons la méthode, nous pouvons l'appeler directement via user.PrintInfo().

En plus des récepteurs de type valeur, le langage Go prend également en charge les récepteurs de type pointeur. Grâce au récepteur de type pointeur, nous pouvons modifier les variables membres dans l'instance de structure.

Par exemple, nous souhaitons maintenant définir une méthode pour augmenter l'âge de la structure Utilisateur. Nous pouvons définir la méthode suivante :

func (u *User) AddAge(i int){
    u.age += i
}

À ce stade, nous pouvons augmenter l'âge de l'utilisateur en appelant la méthode AddAge :

user := &User{"Tom", 20}
user.AddAge(1)
user.PrintInfo()  // 输出:name: Tom, age: 21

Il convient de noter que le pointeur utilisateur est transmis ici, pas la valeur de la structure. En effet, le récepteur est de type pointeur, le pointeur correspondant doit donc être transmis.

De plus, il est important de noter que si le récepteur d'une méthode est de type non-pointeur, alors toute opération de modification sur celui-ci générera une nouvelle valeur. Une attention particulière est donc requise lors de la conception des méthodes.

En général, le récepteur est un concept très important dans le langage Go. En utilisant les récepteurs correctement et rationnellement, nous pouvons facilement mettre en œuvre les fonctions de programmation orientée objet.

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