Reflect.Value.FieldByName によるパニック
リフレクト値の .FieldByName メソッドは、ポインター Value で呼び出されたときにパニックを生成します。指定された値が構造体自体ではなく構造体へのポインタである場合、エラー メッセージ「reflect: call ofreflect.Value.FieldByName on ptr Value」がスローされます。
指定されたコードでは、次の行が表示されます。 「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 中国語 Web サイトの他の関連記事を参照してください。