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) }
Es funktioniert Aber wenn ich 3 solcher Dateien habe
rootproject ├── magazine │ ├── address.go │ └── employee.go └── main.go
magazine/address.go
package magazine type address struct { street string city string state string postalcode string }
magazine/employee.go
package magazine type employee struct { name string salary float64 address }
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) }
Fehler:(
mixture of field:value and value elements in struct literal
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?
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) }
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) }
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!