在PHP的开发中,经常会遇到在一个结构体中使用另一个结构体字段的情况。然而,直接将其引用为键可能会造成代码的混乱和不易维护。那么如何在另一个结构体中使用结构体字段呢?php小编百草为大家提供了一种简洁明了的解决方案,让你的代码更加清晰和易读。下面就让我们一起来看看吧!
我想将一个结构体字段插入到另一个结构体中,而不必使用结构体名称。
我知道我能做到这一点:
type person struct { name string } type user struct { person email, password string }
但是它会产生这个结构:
user := user{person: person{name: ""}, email: "", password: ""}
我怎样才能做这样的事情:
type person struct { name string } type user struct { name person.name // here email, password string }
像这样使用它
user := User{Name: "", Email: "", Password: ""}
可能吗?
简单地说,使用当前的语言实现是做不到的。
初始化文字时,您需要明确(或者,换句话说:文字![原文如此])。由于 user
包含 person
,因此文字 user
必须包含文字 person
,如下所示:
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?", }
但是,一旦您拥有 user
类型的user
类型的变量,您就可以利用匿名字段通过 user
设置(或获取)匿名 person
的 name
变量
user
设置(或获取)匿名
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?",
person
为什么 go 让我做所有这些工作?
让我们想象一下,可以按照您正在寻找的方式初始化内部 user
结构并添加它自己的 name
:
u := user{ name: "bob" }
现在让我们进一步想象一下,我们稍后修改 user
结构并添加它自己的 name
字段:
type user struct { person name string email string password string }
现在您user.person.name
的代码相同,但现在它正在初始化 user.name
可以
u := user{ name: "bob" }
请注意,这与之前初始化
。不好。
user
中添加 name
字段已经类似地“破坏”了 user
变量上对 name
更多问题
这样的代码还潜藏着更多的陷阱。person
字段,user.person.name
user
中添加 字段name
字段,则 this 是编组为 "name"
的字段,并且 user.person.name
已经类似地“破坏”了 user
变量上对 的非限定引用:
u.name = "bob" // used to set user.person.name, now sets user.name
此外,仅使用匿名 user.person.name
添加 json
字段,user.person.name
字段默认编组为 json 作为“名称”字段:
{ "name": "", "email": "", "password": "" }
如果添加了 字段,则 thisperson
被编组为带有 name
是编组为 "name"
的字段,并且 user.person.name
字段根本不编组 >.
您可能认为可以为 标签,例如person
的编组字段名称,即使 user
没有 name
type user struct {
person `json:"personname"`
name string
email string
password string
}
但是
被编组为带有 🎜 字段的🎜对象🎜:🎜
{ "PersonName": { "Name": "" }, "Name": "", "Email": "", "Password": "" }🎜🎜如果您尝试更改匿名 🎜 的编组字段名称,即使
user
没有 🎜 字段,也会发生这种情况🎜。🎜
🎜简而言之:在结构中使用匿名结构作为“添加字段”的方式可能存在问题且脆弱,应该避免。🎜以上是如何在另一个结构体中使用结构体字段而不将其引用为键的详细内容。更多信息请关注PHP中文网其他相关文章!