Dans le développement PHP, nous rencontrons souvent des situations où un champ de structure est utilisé dans un autre champ de structure. Cependant, le référencer directement en tant que clé peut conduire à un code encombré et impossible à maintenir. Alors comment utiliser les champs de structure dans une autre structure ? L'éditeur PHP Baicao vous propose une solution concise et claire pour rendre votre code plus clair et plus facile à lire. Jetons un coup d'œil ci-dessous !
Je souhaite insérer un champ de structure dans une autre structure sans avoir à utiliser le nom de la structure.
Je sais que je peux faire ça :
type person struct { name string } type user struct { person email, password string }
Mais il produit cette structure :
user := user{person: person{name: ""}, email: "", password: ""}
Comment puis-je faire quelque chose comme ça :
type person struct { name string } type user struct { name person.name // here email, password string }
Utilisez-le comme ça
user := User{Name: "", Email: "", Password: ""}
Est-ce possible ?
En termes simples, cela ne peut pas être fait avec l'implémentation actuelle du langage.
Lors de l'initialisation d'un texte, vous devez être explicite (ou, en d'autres termes : texte ! [sic]). Depuis user
包含 person
,因此文字 user
必须包含文字 person
, ça ressemble à ça :
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?", }
Cependant, une fois que vous disposez d'une user
类型的变量,您就可以利用匿名字段通过 user
设置(或获取)匿名 person
的 name
variable
user
, vous pouvez profiter du champ anonyme pour définir (ou obtenir) l'anonyme 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?",
Pourquoi va-t-il me faire faire tout ce travail ? person
: user
结构并添加它自己的 name
u := user{ name: "bob" }
user
et ajoutons ses propres champs : name
type user struct { person name string email string password string }
pouvez user.person.name
的代码相同,但现在它正在初始化 user.name
évidemment initialiser le nouveau
u := user{ name: "bob" }
. pas bon.
Plus de questionsuser
中添加 name
字段已经类似地“破坏”了 user
变量上对 name
person
字段,user.person.name
Tout d'abord, l'ajout du champ
dans user
a name
字段,则 this 是编组为 "name"
的字段,并且 user.person.name
de la même manière "cassé" la référence non qualifiée à sur la variable user
:
u.name = "bob" // used to set user.person.name, now sets user.name
anonymes, le champ user.person.name
est marshalé en json par défaut en tant que champ "nom": user.person.name
添加 json
{ "name": "", "email": "", "password": "" }
est ajouté, alors this est le champ marshalé en "name"
et le champ user.person.name
n'est pas du tout marshalé person
被编组为带有 name
> .
comme
type user struct {
person `json:"personname"`
name string
email string
password string
}
person
的编组字段名称,即使 user
没有 name
Mais maintenant
est rassemblé en un
objet 🎜 avec 🎜 champs : 🎜{ "PersonName": { "Name": "" }, "Name": "", "Email": "", "Password": "" }
utilisateur
n'a pas de champ 🎜. 🎜
🎜En bref : utiliser des structures anonymes au sein d'une structure comme moyen "d'ajouter des champs" peut être problématique et fragile, et doit être évité. 🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!