Heim >Backend-Entwicklung >Golang >Wie initialisiere ich eingebettete Strukturen in Go richtig?

Wie initialisiere ich eingebettete Strukturen in Go richtig?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-24 10:21:24580Durchsuche

How to Correctly Initialize Embedded Structs in Go?

In Golang eingebettete Strukturtypen: Syntax und Verwendung verstehen

Bei der Arbeit mit eingebetteten Strukturtypen in Go ist es wichtig, deren Syntax und zu verstehen ordnungsgemäße Verwendung. Dieser Artikel befasst sich mit dem Problem, dass eine eingebettete Struktur nicht initialisiert werden kann.

Problem:

Berücksichtigen Sie die folgenden Typen:

type Value interface{}

type NamedValue struct {
    Name  string
    Value Value
}

type ErrorValue struct {
    NamedValue
    Error error
}

Versuch Initialisieren Sie einen ErrorValue mit der Syntax:

e := ErrorValue{Name: "alpha", Value: 123, Error: err}

ergibt einen Fehler.

Lösung:

Eingebettete Typen, auch unbenannte Felder genannt, werden mit ihrem unqualifizierten Typnamen bezeichnet. Im bereitgestellten Code ist die Syntax zum Initialisieren des ErrorValue falsch.

Gemäß der Go-Sprachspezifikation sollte ein eingebettetes Feld mit dem Typnamen ohne Feldnamen initialisiert werden. Hier ist die richtige Syntax:

e := ErrorValue{NamedValue: NamedValue{Name: "fine", Value: 33}, Error: err}

Alternativ können Sie die Feldnamen aus dem zusammengesetzten Literal weglassen:

e := ErrorValue{NamedValue{"fine", 33}, err}

Beispiel:

package main

import "fmt"

type Value interface{}

type NamedValue struct {
    Name  string
    Value Value
}

type ErrorValue struct {
    NamedValue
    Error error
}

func main() {
    e := ErrorValue{NamedValue{Name: "alpha", Value: 123}, fmt.Errorf("some error")}
    fmt.Println(e)
}

Ausgabe:

{NamedValue:{Name:alpha Value:123} Error:some error}

Durch Verständnis der Syntax und Verwendung von Embedded Strukturtypen können Sie sie effektiv in Ihren Go-Programmen nutzen.

Das obige ist der detaillierte Inhalt vonWie initialisiere ich eingebettete Strukturen in Go richtig?. 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