„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Warum ändert meine GO -Methode den Instanzwert nicht, es sei denn, ich verwende einen Zeigerempfänger?

Warum ändert meine GO -Methode den Instanzwert nicht, es sei denn, ich verwende einen Zeigerempfänger?

Gepostet am 2025-02-06
Durchsuche:905

Why Doesn't My Go Method Modify the Instance Value Unless I Use a Pointer Receiver?

Golang -Methode mit Zeigerempfänger

Wenn versucht wird, den Wert einer Instanz durch eine Methode zu ändern, ist es entscheidend, das Konzept des Zeigers zu verstehen Empfänger. In diesem Beispiel funktioniert die SetsOMefield -Methode nicht wie erwartet, da ihr Empfänger nicht aus Zeigertyp ist.

Um dies zu korrigieren, ändern wir die Methode SetSomeField, um einen Zeigerempfänger wie folgt zu akzeptieren:

func (i *Implementation) SetSomeField(newValue string) {
    ...
}

Diese Änderung führt jedoch ein neues Problem ein: Die Struktur implant Implementierung der Schnittstelle. Auf diese Weise können wir die Methode ermöglichen, die tatsächliche Instanz zu ändern, ohne eine Kopie zu erstellen. Hier ist der geänderte Code:

type iface interface { Setsomefield (NewValue -String) GETOMEFIELD () String } Typimplementierungsstruktur { einige Field String } Func (i *Implementierung) getomefield () String { Rückkehr i.somefield } func (i *Implementierung) setSomeField (NewValue String) { isomefield = newValue } func create () *Implementierung { Return & Implementierung {SOMEFIELD: "Hallo"} } func main () { var a iface a = create () A. Setsomefield ("Welt") fmt.println (a.getsomefield ()) }

type IFace interface {
    SetSomeField(newValue string)
    GetSomeField() string
}

type Implementation struct {
    someField string
}

func (i *Implementation) GetSomeField() string {
    return i.someField
}

func (i *Implementation) SetSomeField(newValue string) {
    i.someField = newValue
}

func Create() *Implementation {
    return &Implementation{someField: "Hello"}
}

func main() {
    var a IFace
    a = Create()
    a.SetSomeField("World")
    fmt.Println(a.GetSomeField())
}
.
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3