Heim > Backend-Entwicklung > Golang > Warum können Go-Schnittstellen Setter-Methoden nicht direkt unterstützen und wie kann dies umgangen werden?

Warum können Go-Schnittstellen Setter-Methoden nicht direkt unterstützen und wie kann dies umgangen werden?

Mary-Kate Olsen
Freigeben: 2024-11-25 00:50:14
Original
304 Leute haben es durchsucht

Why Can't Go Interfaces Directly Support Setter Methods, and How Can This Be Worked Around?

Polymorphismus in Go: Ein genauerer Blick auf Schnittstellenmethoden und Zeigerempfänger

In Go wird Polymorphismus nicht nativ unterstützt, kann aber sein wird über Schnittstellen erreicht. Dies wirft eine häufig gestellte Frage auf: Warum sind Setter-Methoden für Schnittstellen nicht zulässig?

Wie im bereitgestellten Code gezeigt, gehen Änderungen, die innerhalb der Funktion vorgenommen werden, beim Beenden verloren, wenn die Setter-Methode als Wertempfänger definiert ist . Das Ändern des Empfängers in einen Zeigerempfänger ermöglicht dauerhafte Änderungen, führt jedoch zu einem Kompilierungsfehler.

Um dieses Problem zu beheben, bietet Go eine Problemumgehung. Der korrigierte Code ändert den Empfänger der Setter-Methode in einen Zeiger. Dadurch kann die Funktion die zugrunde liegende Datenstruktur ändern und die Änderungen beibehalten. Der geänderte Code verwendet eine Schnittstelle und stellt so sicher, dass über die Schnittstelle auf die Zeigerempfängermethode zugegriffen werden kann.

package main

import "fmt"

type MyInterfacer interface {
    Get() int
    Set(i int)
}

type MyStruct struct {
    data int
}

func (this *MyStruct) Get() int {
    return this.data
}

func (this *MyStruct) Set(i int) {
    this.data = i
}

func main() {
    s := &MyStruct{123}
    fmt.Println(s.Get())

    s.Set(456)
    fmt.Println(s.Get())

    var mi MyInterfacer = s
    mi.Set(789)
    fmt.Println(mi.Get())
}
Nach dem Login kopieren

Obwohl dies kein reiner Polymorphismus ist, wird durch die Verwendung von Schnittstellen und Zeigerempfängern effektiv ein ähnliches Ergebnis erzielt. Der Code kann verwendet werden, um Eigenschaften über eine Schnittstelle festzulegen und so Daten und Vorgänge sauber zu kapseln.

Das obige ist der detaillierte Inhalt vonWarum können Go-Schnittstellen Setter-Methoden nicht direkt unterstützen und wie kann dies umgangen werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage