Heim >Backend-Entwicklung >Golang >So verwenden Sie ein Strukturfeld in einer anderen Struktur, ohne es als Schlüssel zu referenzieren
Bei der PHP-Entwicklung kommt es häufig vor, dass ein Strukturfeld in einem anderen Strukturfeld verwendet wird. Die direkte Referenzierung als Schlüssel kann jedoch zu überladenem und nicht wartbarem Code führen. Wie verwendet man also Strukturfelder in einer anderen Struktur? Der PHP-Editor Baicao bietet Ihnen eine prägnante und klare Lösung, um Ihren Code klarer und leichter lesbar zu machen. Werfen wir einen Blick nach unten!
Ich möchte ein Strukturfeld in eine andere Struktur einfügen, ohne den Strukturnamen verwenden zu müssen.
Ich weiß, dass ich das schaffen kann:
type person struct { name string } type user struct { person email, password string }
Aber es erzeugt diese Struktur:
user := user{person: person{name: ""}, email: "", password: ""}
Wie kann ich so etwas machen:
type person struct { name string } type user struct { name person.name // here email, password string }
Verwenden Sie es so
user := User{Name: "", Email: "", Password: ""}
Ist es möglich?
Einfach ausgedrückt ist dies mit der aktuellen Sprachimplementierung nicht möglich.
Beim Initialisieren eines Textes müssen Sie explizit sein (oder mit anderen Worten: Text![sic]). Seit user
包含 person
,因此文字 user
必须包含文字 person
sieht es so aus:
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?", }
Sobald Sie jedoch eine user
类型的变量,您就可以利用匿名字段通过 user
设置(或获取)匿名 person
的 name
Variable
Benutzer
haben, können Sie das anonyme Feld nutzen, um die Anonymität Benutzer
festzulegen (oder abzurufen): 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?",
Warum zwingt mich Go dazu, diese ganze Arbeit zu machen? person
: user
结构并添加它自己的 name
u := user{ name: "bob" }Stellen wir uns nun weiter vor, dass wir später die
user
-Struktur ändern und eigene Felder hinzufügen:
type user struct { person name string email string password string }
name
Jetzt können Sie natürlich das neue Feld initialisieren: user.person.name
的代码相同,但现在它正在初始化 user.name
u := user{ name: "bob" }Bitte beachten Sie, dass sich dies von der vorherigen Initialisierung unterscheidet
Weitere Fragen
In solchem Code sind noch weitere Fallen versteckt. user
中添加 name
字段已经类似地“破坏”了 user
变量上对 name
-Feldes person
字段,user.person.name
in user
in der user
-Variablen name
字段,则 this 是编组为 "name"
的字段,并且 user.person.name
in ähnlicher Weise „gebrochen“.
u.name = "bob" // used to set user.person.name, now sets user.nameDa außerdem nur anonyme Felder verwendet werden, wird das Feld
user.person.name
standardmäßig als „Name“-Feld an JSON gemarshallt:
{ "name": "", "email": "", "password": "" }
Wenn das user.person.name
添加 json
-Feld hinzugefügt wird, dann
ist das Feld, das an "name"
gemarshallt wird, und das Feld user.person.name
wird überhaupt nicht gemarshallt > .person
被编组为带有 name
Du denkst vielleicht, du könntest mit „Gefällt mir“ markieren
type user struct { person `json:"personname"` name string email string password string }Aber
jetzt person
的编组字段名称,即使 user
没有 name
wird in ein Objekt
Feldern gemarshallt:
{ "PersonName": { "Name": "" }, "Name": "", "Email": "", "Password": "" }🎜🎜Dies passiert 🎜, wenn Sie versuchen, den Marshalling-Feldnamen eines anonymen 🎜 zu ändern, obwohl der
Benutzer
kein 🎜-Feld hat. 🎜
🎜Kurz gesagt: Die Verwendung anonymer Strukturen innerhalb einer Struktur als Möglichkeit zum „Hinzufügen von Feldern“ kann problematisch und fragil sein und sollte vermieden werden. 🎜Das obige ist der detaillierte Inhalt vonSo verwenden Sie ein Strukturfeld in einer anderen Struktur, ohne es als Schlüssel zu referenzieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!