嵌套結構和反射中的引用傳遞
在Go 中,了解嵌套結構以及如何在反射中通過引用傳遞它們是至關重要的。考慮一個場景,其中您有嵌套的Client 和Contact 結構:
<code class="go">type Client struct { Id int Age int PrimaryContact Contact Name string } type Contact struct { Id int ClientId int IsPrimary bool Email string }</code>
當您內省Client 結構的PrimaryContact 欄位時,您可能會遇到“reflect.Value.Set using unaddressable value”恐慌。這是因為 PrimaryContact 是按值傳遞的,而不是按引用傳遞的。要解決此問題,我們需要使用反射透過參考傳遞 PrimaryContact。
使用Value.Addr() 的解
程式碼:
<code class="go">package main import ( "fmt" "reflect" ) type Client struct { Id int Age int PrimaryContact Contact Name string } type Contact struct { Id int ClientId int IsPrimary bool Email string } func main() { client := Client{} v := reflect.ValueOf(&client) primaryContact := v.FieldByName("PrimaryContact").Addr() primaryContact.FieldByName("Id").SetInt(123) primaryContact.FieldByName("ClientId").SetInt(456) primaryContact.FieldByName("IsPrimary").SetBool(true) primaryContact.FieldByName("Email").SetString("example@example.com") fmt.Printf("%+v\n", client) }</code>
輸出:
{Id:0 Age:0 PrimaryContact:{Id:123 ClientId:456 IsPrimary:true Email:example@example.com} Name:}
輸出:
以上是如何使用 Value.Addr() 在反射中透過引用傳遞巢狀結構?的詳細內容。更多資訊請關注PHP中文網其他相關文章!