Heim > Backend-Entwicklung > Golang > Sollten Sie eingebettete Strukturen verwenden, um Daten in Go-Schnittstellen zu definieren?

Sollten Sie eingebettete Strukturen verwenden, um Daten in Go-Schnittstellen zu definieren?

Barbara Streisand
Freigeben: 2024-12-15 13:34:10
Original
867 Leute haben es durchsucht

Should You Use Embedded Structs to Define Data in Go Interfaces?

Go-Schnittstellenfelder: Zu verwenden oder nicht zu verwenden?

In Go werden Schnittstellen normalerweise zum Definieren von Funktionalität und nicht von Daten verwendet. Das bedeutet, dass Sie zwar Methoden in einer Schnittstelle angeben können, aber keine erforderlichen Felder in den Implementierungen angeben können.

Mit eingebetteten Strukturen ist es jedoch möglich, Schnittstellen zu erstellen, die Daten effektiv definieren, indem sie sie über Methoden verfügbar machen.

Beispiel:

Betrachten Sie das folgende Beispiel:

type PersonProvider interface {
    GetPerson() *Person
}

type Person struct {
    Name string
    Age  int64
}

func (p *Person) GetPerson() *Person {
    return p
}

type Bob struct {
    FavoriteNumber int64
    Person
}
Nach dem Login kopieren

In diesem Beispiel ist das Die PersonProvider-Schnittstelle definiert eine Methode, die einen Zeiger auf ein Person-Objekt zurückgibt. Die Personenstruktur enthält die Datenfelder Name und Alter. Die Bob-Struktur bettet die Person-Struktur ein und erbt effektiv deren Felder.

Funktionen, die mit Daten interagieren:

Funktionen können mit den eingebetteten Daten über die GetPerson()-Methode interagieren:

func SayHi(pp PersonProvider) {
    fmt.Printf("Hello, %v!\r", pp.GetPerson().Name)
}

func main() {
    b := &Bob{
        5,
        Person{"Bob", 23},
    }
    SayHi(b)
    fmt.Printf("You're %v years old now!", b.Age)
}
Nach dem Login kopieren

Diskussion:

Diese Technik ermöglicht Schnittstellen, die Daten statt Verhalten definieren. Es bietet erhöhte Flexibilität, indem es Strukturen ermöglicht, Schnittstellen zu implementieren, ohne ihre konkreten Felder offenzulegen. Es ist jedoch wichtig zu beachten, dass das Offenlegen von Zeigern immer noch direkten Zugriff auf die Daten gewährt, was eine begrenzte zusätzliche Flexibilität bietet.

Außerdem erfordern Go-Konventionen nicht immer die Verwendung von Abstraktionen für den Datenzugriff. In vielen Fällen ist die Offenlegung von Datenattributen durch Einbettung oder öffentliche Felder akzeptabel. Wenn Sie diese Technik in Betracht ziehen, wird empfohlen, im Einzelfall zu beurteilen, ob sie erhebliche Vorteile gegenüber der direkten Offenlegung von Attributen bietet. Wenn das Offenlegen von Daten durch Getter und Setter für zukünftige Flexibilität oder API-Kompatibilität nicht entscheidend ist, könnten öffentliche Attribute eine einfachere Lösung sein.

Obwohl die vorgestellte Technik insgesamt ein cleverer Trick ist, ist es ratsam, die Notwendigkeit dafür abzuwägen Gehen Sie sorgfältig vor und prüfen Sie alternative Ansätze, die in manchen Kontexten möglicherweise angemessener sind.

Das obige ist der detaillierte Inhalt vonSollten Sie eingebettete Strukturen verwenden, um Daten in Go-Schnittstellen zu definieren?. 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