Saya newbie di sini :) Tak faham
Apabila saya melakukan ini dalam fail:
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) }
Ia berkesan Tapi bila dah ada 3 file macam ni
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 }
dan
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) }
Ralat :(
mixture of field:value and value elements in struct literal
Saya tidak faham, apa salah saya? Saya fikir jika struktur itu bersarang, ia dikatakan tertanam dalam struktur luar dan saya boleh mengakses medan struktur dalam dari struktur luar. Ini adalah kes dengan contoh pertama saya (fail tunggal), tetapi apabila saya melakukan ini dalam pakej. Adakah terdapat perbezaan?
Saya rasa jika struktur itu bersarang, ia dikatakan tertanam dalam struktur luar dan saya boleh mengakses medan struktur dalam dari struktur luar.
Ya, anda boleh mengakses ahli medan terbenam secara langsung, tetapi ini adalah apabila menggunakan huruf majmuk. Jika anda melihat peraturan untuk menstruktur teks, anda akan mendapati perkara berikut:
Jika mana-mana elemen mempunyai kunci, maka setiap elemen mesti mempunyai kunci.
Peraturan ini terpakai sama ada medan dibenamkan atau tidak.
Untuk membetulkan ralat anda boleh mengalih keluar kekunci lain:
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) }
Atau anda boleh menentukan semua kunci:
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) }
Perhatikan bahawa untuk medan terbenam, anda boleh merujuk medan terbenam menggunakan nama jenis yang tidak layak.
https://www.php.cn/link/2eeb0ca3f02a275d5179f3b6d9e86e7d:
Medan yang diisytiharkan dengan jenis tetapi tanpa nama medan yang jelas dipanggil medan terbenam. Medan terbenam mesti dinyatakan sebagai nama jenis t
或指向非接口类型名称 *t
的指针,并且 t
yang mungkin bukan jenis penunjuk. Nama jenis tidak layak bertindak sebagai nama medan.
Atas ialah kandungan terperinci Bagaimana untuk memberikan nilai kepada struktur terbenam yang diimport secara literal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!