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!
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)
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!
Wenn Sie Fehler oder Fragen haben, können Sie diese gerne kommentieren! !!
Recommended Posts