Rumah > Artikel > pembangunan bahagian belakang > Cara menggunakan medan struct dalam struct lain tanpa merujuknya sebagai kunci
Dalam pembangunan PHP, kita sering menghadapi situasi menggunakan medan struktur lain dalam satu struktur. Walau bagaimanapun, merujuknya secara langsung sebagai kunci boleh membawa kepada kod yang bersepah dan tidak dapat diselenggara. Jadi bagaimana untuk menggunakan medan struktur dalam struktur lain? Editor PHP Baicao memberikan anda penyelesaian yang ringkas dan jelas untuk menjadikan kod anda lebih jelas dan mudah dibaca. Mari lihat di bawah!
Saya ingin memasukkan medan struct ke dalam struct lain tanpa perlu menggunakan nama struct.
Saya tahu saya boleh lakukan ini:
type person struct { name string } type user struct { person email, password string }
Tetapi ia menghasilkan struktur ini:
user := user{person: person{name: ""}, email: "", password: ""}
Bagaimana saya boleh melakukan sesuatu seperti ini:
type person struct { name string } type user struct { name person.name // here email, password string }
Guna macam ni
user := User{Name: "", Email: "", Password: ""}
Adakah boleh?
Ringkasnya, ia tidak boleh dilakukan menggunakan pelaksanaan bahasa semasa.
Apabila memulakan teks, anda perlu jelas (atau, dengan kata lain: teks! [sic]). Sejak user
包含 person
,因此文字 user
必须包含文字 person
, ia kelihatan seperti ini:
u := user{ person: person{ name: "bob", }, email: "<a href="https://www.php.cn/link/89fee0513b6668e555959f5dc23238e9" class="__cf_email__" data-cfemail="a5c7cac7e5c7cac7d6d5cad18bc6cac8">[email protected]</a>", password: "you're kidding right?", }
Walau bagaimanapun, sebaik sahaja anda mempunyai user
类型的变量,您就可以利用匿名字段通过 user
设置(或获取)匿名 person
的 name
pembolehubah
u := user{} u.name = "bob" u.email = "<a href="https://www.php.cn/link/89fee0513b6668e555959f5dc23238e9" class="__cf_email__" data-cfemail="8fede0edcfede0edfcffe0fba1ece0e2">[email protected]</a>", u.password = "you're kidding right?",
Kenapa pergi membuat saya melakukan semua kerja ini? person
: user
结构并添加它自己的 name
u := user{ name: "bob" }Sekarang mari kita bayangkan lebih lanjut bahawa kita kemudian mengubah suai struktur
menambah medan sendiri: name
type user struct { person name string email string password string }Kini anda
boleh user.person.name
的代码相同,但现在它正在初始化 user.name
jelas memulakan medan
u := user{ name: "bob" }
. tak bagus.
Lagi soalanuser
中添加 name
字段已经类似地“破坏”了 user
变量上对 name
person
字段,user.person.name
Pertama sekali, menambah medan
dalam name
字段,则 this 是编组为 "name"
的字段,并且 user.person.name
begitu juga "memecahkan" rujukan tidak layak kepada pada pembolehubah u.name = "bob" // used to set user.person.name, now sets user.name
, medan user.person.name
akan digabungkan ke json secara lalai sebagai medan "nama": user.person.name
添加 json
{ "name": "", "email": "", "password": "" }Jika medan
ditambah, maka ini ialah medan yang dimarshallkan kepada "name"
dan medan user.person.name
tidak dimarshallkan sama sekali person
被编组为带有 name
> .
suka
type user struct {
person `json:"personname"`
name string
email string
password string
}
person
的编组字段名称,即使 user
没有 name
Tetapi kini
disusun menjadi objek
🎜 dengan 🎜 medan: 🎜{ "PersonName": { "Name": "" }, "Name": "", "Email": "", "Password": "" }🎜🎜Ini akan berlaku 🎜 jika anda cuba menukar nama medan marshalling tanpa nama 🎜 walaupun
Atas ialah kandungan terperinci Cara menggunakan medan struct dalam struct lain tanpa merujuknya sebagai kunci. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!