Go 言語リフレクションを使用すると、ブール値、整数、浮動小数点数、文字列の変更など、実行時に変数値を操作できます。変数の値を取得すると、SetBool、SetInt、SetFloat、および SetString メソッドを呼び出して変数を変更できます。たとえば、JSON 文字列を構造に解析し、リフレクションを使用して構造フィールドの値を変更できます。反映操作は遅く、変更不可能なフィールドは変更できないことに注意してください。構造フィールドの値を変更する場合、関連するフィールドは自動的に更新されない場合があります。
Go リフレクションを使用して変数値を動的に変更する
リフレクションは、Go プログラムが実行時の値で変数を操作できるようにする強力なツールです。 。動的型付けやコード生成などのさまざまな高度な機能を実装するのに役立ちます。
基本
リフレクション API には、値を表す型 reflect.Value
が含まれています。 reflect.ValueOf(x)
を使用して、特定の変数の値を取得できます。
Value には、値を変更するために使用できる次のメソッドがあります:
SetBool(v)
、SetInt(v)
, SetFloat(v)
: ブール値、整数、浮動小数点数を設定しますSetString(v)
: 文字列を設定します Set(v)
: 任意の値を設定します。手動による型変換が必要です 実用的なケース
以下は、リフレクションを使用して解析する例です。 JSON 文字列を構造体に追加します:
import ( "encoding/json" "reflect" ) type User struct { Name string Age int } func main() { jsonStr := `{ "Name": "John", "Age": 30 }` u := &User{} // 解析 JSON 字符串到 Value v := reflect.ValueOf(u).Elem() err := json.Unmarshal([]byte(jsonStr), u) if err != nil { panic(err) } // 使用反射修改字段值 v.FieldByName("Name").SetString("Alice") // 输出修改后的值 fmt.Printf("User: %+v\n", u) }
Note
リフレクションを使用する場合は、次の点に注意する必要があります:
以上がgolangでリフレクションを使用して変数値を動的に変更する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。