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

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

藏色散人
藏色散人avant
2020-08-21 13:17:352896parcourir
Ci-dessous

Tutoriel Golang colonne pour présenter 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}

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)}

Cette méthode n'appartient pas à la classe Integer, mais au type pointeur pointant sur Integer. Lorsque nous appelons la méthode, la raison pour laquelle nous pouvons 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))}

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}

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 .

Pour plus d'articles techniques sur Go, veuillez visiter la colonne

Tutoriel sur le langage Go !

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer