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中文網其他相關文章!