Heim > Backend-Entwicklung > Golang > Wie kann einem importierten eingebetteten Strukturliteral ein Wert bereitgestellt werden?

Wie kann einem importierten eingebetteten Strukturliteral ein Wert bereitgestellt werden?

WBOY
Freigeben: 2024-02-05 21:54:11
nach vorne
1127 Leute haben es durchsucht

Wie kann einem importierten eingebetteten Strukturliteral ein Wert bereitgestellt werden?

Frageninhalt

Ich bin hier ein Neuling :) Ich kann es nicht verstehen

Wenn ich das in einer Datei mache:

scratch.go

package main

import "fmt"

type foo struct {
    field1 string
    field2 string
}

type bar struct {
    foo
    field3 string
    field4 string
}

func main() {
    foobar := bar{
        foo{
            "apples",
            "banana",
        },
        "spam",
        "eggs",
    }
    fmt.printf("%#v\n", foobar)

}
Nach dem Login kopieren

Es funktioniert Aber wenn ich 3 solcher Dateien habe

rootproject
├── magazine
│   ├── address.go
│   └── employee.go
└── main.go
Nach dem Login kopieren

magazine/address.go

package magazine

type address struct {
    street     string
    city       string
    state      string
    postalcode string
}
Nach dem Login kopieren

magazine/employee.go

package magazine

type employee struct {
    name   string
    salary float64
    address
}
Nach dem Login kopieren

und main.go

package main

import (
    "fmt"
    "magazine"
)

func main() {
    employee := magazine.employee{
        name:   "pogi",
        salary: 69420,
        magazine.address{
            street:     "23 pukinginamo st.",
            city:       "bactol city",
            state:      "betlog",
            postalcode: "23432",
        },
    }

    fmt.printf("%#v\n", employee)

}
Nach dem Login kopieren

Fehler:(

mixture of field:value and value elements in struct literal
Nach dem Login kopieren

Ich verstehe nicht, was habe ich falsch gemacht? Ich denke, wenn die Struktur verschachtelt ist, sagt man, dass sie in die äußere Struktur eingebettet ist und ich von der äußeren Struktur aus auf die Felder der inneren Struktur zugreifen kann. Dies ist bei meinem ersten Beispiel (einzelne Datei) der Fall, aber wenn ich dies in einem Paket mache. Gibt es einen Unterschied?


Richtige Antwort


Ich denke, wenn die Struktur verschachtelt ist, sagt man, dass sie in die äußere Struktur eingebettet ist und ich von der äußeren Struktur aus auf die Felder der inneren Struktur zugreifen kann.

Ja, Sie können direkt auf Mitglieder eingebetteter Felder zugreifen, aber dies geschieht, wenn Sie zusammengesetzte Literale verwenden. Wenn Sie sich die Regeln zur Textstrukturierung ansehen, werden Sie Folgendes feststellen:

Wenn ein Element einen Schlüssel hat, muss jedes Element einen Schlüssel haben.

Diese Regel gilt unabhängig davon, ob das Feld eingebettet ist oder nicht.

Um den Fehler zu beheben, können Sie andere Schlüssel entfernen:

func main() {
    employee := magazine.employee{
        "pogi",
        69420,
        magazine.address{
            street:     "23 pukinginamo st.",
            city:       "bactol city",
            state:      "betlog",
            postalcode: "23432",
        },
    }
    fmt.printf("%#v\n", employee)
}
Nach dem Login kopieren

Oder Sie können alle Schlüssel angeben:

func main() {
    employee := magazine.Employee{
        Name:   "pogi",
        Salary: 69420,
        Address: magazine.Address{
            Street:     "23 pukinginamo st.",
            City:       "bactol city",
            State:      "betlog",
            PostalCode: "23432",
        },
    }
    fmt.Printf("%#v\n", employee)
}
Nach dem Login kopieren

Beachten Sie, dass Sie bei eingebetteten Feldern mit dem unqualifizierten Namen des Typs auf das eingebettete Feld verweisen können.

https://www.php.cn/link/2eeb0ca3f02a275d5179f3b6d9e86e7d

Felder, die mit einem Typ, aber ohne expliziten Feldnamen deklariert wurden, werden als eingebettete Felder bezeichnet. Eingebettete Felder müssen als Typnamen t 或指向非接口类型名称 *t 的指针,并且 t angegeben werden, die selbst möglicherweise keine Zeigertypen sind. Unqualifizierte Typnamen fungieren als Feldnamen.

Das obige ist der detaillierte Inhalt vonWie kann einem importierten eingebetteten Strukturliteral ein Wert bereitgestellt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage