Vermindert die Übergabe von „this“ als Wert die Leistung in Go-Methoden?
Im Gegensatz zu C, wo durch Werte übergebene Funktionsargumente zu einer erheblichen Leistung führen können Da die Methodenempfänger von Go keine Strafen aufgrund des variablen Kopierens erhalten, folgen sie einem anderen Paradigma.
In Go sind Methodenempfänger bloße syntaktische Annehmlichkeiten. Wie unten gezeigt:
type Something struct { Value int } func (s *Something) ChangeValue(n int) { s.Value = n } func main() { o := new(Something) fmt.Println(o.Value) // Prints 0 o.ChangeValue(8) // Changes o's value to 8 fmt.Println(o.Value) // Prints 8 (*Something).ChangeValue(o, 16) // Same as calling o.ChangeValue(16) fmt.Println(o.Value) // Prints 16 }
Beachten Sie, dass der Empfänger s in ChangeValue ein Zeiger ist, wodurch er einer Referenz in C ähnelt. Wenn der Empfänger ein Werttyp wäre, würde er keine Wertmutation zulassen.
Daher stellt der Zeigerempfängeransatz von Go die Kapselung sicher und verhindert das Kopieren der gesamten „diesen“ Instanz, im Gegensatz zu den in C/C beobachteten Leistungseinbußen zum Übergeben von Argumenten nach Wert.
Das obige ist der detaillierte Inhalt vonHat die Übergabe von „this' als Wert Auswirkungen auf die Leistung in Go-Methoden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!