Heim >Backend-Entwicklung >Golang >Hat die Übergabe von „this' als Wert Auswirkungen auf die Leistung in Go-Methoden?

Hat die Übergabe von „this' als Wert Auswirkungen auf die Leistung in Go-Methoden?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-19 17:27:10742Durchsuche

Does Passing

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn