首頁 >後端開發 >Golang >為什麼在指標值上呼叫'reflect.Value.FieldByName”時會出現恐慌?

為什麼在指標值上呼叫'reflect.Value.FieldByName”時會出現恐慌?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-03 22:00:31536瀏覽

Why does `reflect.Value.FieldByName` panic when called on a pointer value?

Reflect.Value.FieldByName 導致恐慌

反射值的 .FieldByName 方法在指標 Value 上呼叫時會產生恐慌。當提供的值是指向結構體的指標而不是結構體本身時,會拋出錯誤訊息「reflect:在 ptr Value 上呼叫reflect.Value.FieldByName」。

在提供的程式碼中,該行「s :=reflect.ValueOf(&value).Elem()」建立一個指向值結構的指針,然後使用Elem() 取消引用它,這是不必要的。相反,要存取和修改結構體的字段,請使用“s :=reflect.ValueOf(value).Elem()”。

以下更正的程式碼片段消除了恐慌:

s := reflect.ValueOf(value).Elem()
metric := s.FieldByName(subval.Metric).Interface()
fmt.Println(metric)

透過直接反映結構體的值而不是創建不必要的指針,您可以正確存取和操作其欄位而不會遇到恐慌。

以上是為什麼在指標值上呼叫'reflect.Value.FieldByName”時會出現恐慌?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn