Maison > développement back-end > Golang > Explication détaillée des méthodes en langage Go

Explication détaillée des méthodes en langage Go

藏色散人
Libérer: 2020-08-27 13:29:44
avant
2795 Les gens l'ont consulté
Vous trouverez ci-dessous

Tutoriel Golang colonne pour présenter la compréhension de la méthode en langage Go, j'espère que cela sera utile aux amis dans le besoin !

Explication détaillée des méthodes en langage Go

méthode go

Définition La méthode

est une méthode avec des paramètres de récepteur spéciaux Fonction , c'est-à-dire le récepteur de méthode entre func et le nom de la méthode.

func (s Student) GetName() string  {
    return s.name}func (s *Student) SetName(name string) {
    s.name = name}
Copier après la connexion

Nous pouvons appeler les méthodes membres dont le type de récepteur est un pointeur une méthode de pointeur, et les méthodes membres dont le type de récepteur est un non-pointeur sont appelées méthodes de valeur.

Lorsque vous devez modifier l'objet, vous devez utiliser un pointeur (passer par référence), sinon déclarer simplement le type comme un littéral (passer par valeur). Évitez également de copier la valeur à chaque appel de méthode.

type Integer intfunc (a *Integer) Increase(i Integer) {
    *a = *a + i}func main() {
    var a Integer = 2
    var b Integer = 2
    //a.Increase(b)
    //(&a).Increase(b)
    (*Integer).Increase(&a, b)
    fmt.Println(a)}
Copier après la connexion

Cette méthode n'appartient pas à la classe Integer, mais au type pointeur pointant vers Integer, la raison pour laquelle on peut appeler la méthode Increase directement sur une instance est parce que le langage Go. La phase de compilation convertira automatiquement a en type de pointeur correspondant

, donc le code d'appel réel est &a. (&a).Increase(b)

est en fait du sucre syntaxique
type A struct {
  name string}func (a A) Name() string {
  a.name = "Hi! " + a.name  return a.name}func main() {
  a := A{name: "test"}

  fmt.Println(a.Name())

  fmt.Println(A.Name(a))}
Copier après la connexion

est en fait du sucre syntaxique pour a.Name(), et la variable a est ce qu'on appelle le récepteur de méthode. A.Name(a)

func NameOfA(a A) string {
  a.name = "Hi! " + a.name  return a.name}func main() {
  t1 := reflect.TypeOf(A.Name)
  t2 := reflect.TypeOf(NameOfA)

  fmt.Println(t1 == t2)// true}
Copier après la connexion

Le type de fonction dans le langage Go n'est lié qu'aux paramètres et aux valeurs de retour, donc l'égalité de ces deux types peut prouver que la méthode

est essentiellement une fonction ordinaire et que le récepteur est l'implicite premiers Paramètres .

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:
source:learnku.com
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