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)}
, donc le code d'appel réel est &a
. (&a).Increase(b)
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}
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!