[Golang] Grundlagen der Go-Sprache Über Wertempfänger und Zeigerempfänger

Dieses Mal konzentrieren wir uns auf Go-Sprachwertempfänger und Zeigerempfänger! Lesen Sie nach diesem Artikel diesen Artikel, um ein besseres Verständnis der Go-Sprache zu erhalten!

Was ist ein Wertempfänger?


package main

import "fmt"

type Vertex struct {
	X, Y int
}

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

//Wertempfänger
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
}

Dies ist der Wertempfänger. Wenn es kein * gibt, handelt es sich grob gesagt um einen Wertempfänger. Es scheint als Wertübergabe bezeichnet zu werden.

Das Argument wird in v.Scale (10) und in der Scale-Funktion ** v.X = 3 * 10 v.Y = 4 * 10 ** übergeben. Sie können den Inhalt von Vertex jedoch nicht direkt umschreiben, indem Sie den Wert übergeben. Der Wert wurde gerade im Rahmen der Skalierungsfunktion neu geschrieben. Da die Anfangswerte X und Y in der Flächenfunktion verwendet werden, wird daher 3 * 4 = 12 als Rückgabewert ausgegeben.

[Ergänzung] Sie können ** Vertex mit der Area () - Funktion verknüpfen, indem Sie ** func (v Vertex) Area () ** schreiben. ** ** ** Wenn Sie diese Methode aufrufen, können Sie sie aufrufen, indem Sie ** v.Area () ** schreiben. Go hat kein Klassenkonzept, aber Sie können es objektorientiert schreiben. (Es ist wie User.hoge in Ruby)

Wertempfänger


package main

import "fmt"

type Vertex struct {
	X, Y int
}

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

//Zeigerempfänger(*Habe es gerade verstanden
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
}

Ich habe gerade * neben dem Variablennamen hinzugefügt! Auf diese Weise können Sie den Inhalt der Struktur neu schreiben.

Wenn es als Argument der Skalierungsfunktion übergeben wird, ist ** v.X = 30, v.Y = 40 **, das so wie es ist an die Bereichsfunktion übergeben wird.

Daher ist das Ausgabeergebnis von v.Area () 1200!

Vielen Dank für das Lesen bis zum Ende!

Wenn Sie Fehler oder Fragen haben, können Sie diese gerne kommentieren! !!

Recommended Posts

[Golang] Grundlagen der Go-Sprache Über Wertempfänger und Zeigerempfänger
[Golang] Über Go-Sprache Produzent und Konsument
[Golang] Über den Sprachkanal Go
[Golang] Go Sprachgrundlagen Was ist Goroutine?
Funktionen der Go-Sprache
Über den Rückgabewert von pthread_mutex_init ()
Über den Rückgabewert des Histogramms.
Informationen zur Grundlagenliste der Python-Grundlagen
Ich habe go Sprache für API und die minimale Konfiguration der Reaktion für die Front gemacht
Antworten und Eindrücke von 100 Sprachverarbeitungsklopfen - Teil 1
Über sensor_mode und Blickwinkel der Picamera
[Python] Kapitel 02-04 Grundlagen des Python-Programms (Informationen zu Kommentaren)
Ich verglich die Geschwindigkeit von Go Language Web Framework Echo und Python Web Framework Flask
[Grundlagen der modernen mathematischen Statistik mit Python] Kapitel 2: Wahrscheinlichkeitsverteilung und Erwartungswert