[Golang] Principes de base du langage Go À propos du récepteur de valeur et du récepteur de pointeur

Cette fois, nous nous concentrerons sur les récepteurs de valeur de langage Go et les récepteurs de pointeurs! Après cet article, veuillez lire cet article pour mieux comprendre le langage Go!

Qu'est-ce qu'un récepteur de valeur?


package main

import "fmt"

type Vertex struct {
	X, Y int
}

func (v Vertex) Area() int {
	return v.X * v.Y
}

//Récepteur de valeur
func (v Vertex) Scale(i int) {
	v.X = v.X * i
	v.Y = v.Y * i
}

func main() {
	v := Vertex{3, 4}
	v.Scale(10)
	fmt.Println(v.Area()) // => 12
}

C'est le récepteur de valeur. En gros, s'il n'y a pas de *, ce sera un récepteur de valeur. Cela semble s'appeler passage par valeur.

L'argument est passé dans v.Scale (10) et dans la fonction Scale, ** v.X = 3 * 10 v.Y = 4 * 10 **. Cependant, vous ne pouvez pas réécrire directement le contenu de Vertex en passant par valeur. La valeur vient d'être réécrite dans le cadre de la fonction Scale. Par conséquent, puisque les valeurs initiales X et Y sont utilisées dans la fonction Area, 3 * 4 = 12 est émis comme valeur de retour.

[Supplément] Vous pouvez lier ** Vertex à la fonction Area () en écrivant ** func (v Vertex) Area () **. ** ** Lors de l'appel de cette méthode, vous pouvez l'appeler en écrivant ** v.Area () **. Go n'a pas le concept de classes, mais il vous permet de l'écrire de manière orientée objet. (C'est comme User.hoge en rubis)

Récepteur de valeur


package main

import "fmt"

type Vertex struct {
	X, Y int
}

func (v Vertex) Area() int {
	return v.X * v.Y
}

//Récepteur de pointeur(*Viens de le recevoir)
func (v *Vertex) Scale(i int) {
	v.X = v.X * i
	v.Y = v.Y * i
}

func main() {
	v := Vertex{3, 4}
	v.Scale(10)
	fmt.Println(v.Area()) // => 1200
}

Je viens d'ajouter * à côté du nom de la variable! En faisant cela, vous pouvez réécrire le contenu de la structure.

Par conséquent, lorsqu'il est passé comme argument de la fonction Scale, ** v.X = 30, v.Y = 40 **, qui est passé à la fonction Area en l'état.

Par conséquent, le résultat de sortie de v.Area () est 1200!

Merci d'avoir lu jusqu'au bout!

Si vous avez des erreurs ou des questions, n'hésitez pas à commenter! !!

Recommended Posts

[Golang] Principes de base du langage Go À propos du récepteur de valeur et du récepteur de pointeur
[Golang] À propos du producteur et consommateur de langue Go
[Golang] À propos de la chaîne linguistique Go
[Golang] Go les bases de la langue Qu'est-ce que Goroutine?
Caractéristiques du langage Go
À propos de la valeur de retour de pthread_mutex_init ()
À propos de la valeur de retour de l'histogramme.
À propos de la liste de base des bases de Python
J'ai fait go language pour api et la configuration minimum de react pour le front
Réponses et impressions de 100 chocs de traitement linguistique - Partie 1
À propos du sensor_mode et de l'angle de vue de la picamera
[Python] Chapitre 02-04 Bases du programme Python (À propos des commentaires)
J'ai comparé la vitesse de l'écho du framework web en langage go et du flask du framework web python
[Bases des statistiques mathématiques modernes avec python] Chapitre 2: Distribution des probabilités et valeur attendue