まえがき
開発では、構造体や変数などに対してリフレクション操作を実行する必要がよくあります。リフレクションを使用すると、変数、型、その他の関連情報を直接操作できるため、コードがより抽象的かつ柔軟になり、プログラムのロジックがより明確かつシンプルになります。このうち、golang にはリフレクション関連のパッケージ reflect
が用意されており、この記事では reflect
パッケージに焦点を当てて、リフレクションを使用して変数を設定する方法について説明します。
基本
リフレクションを使用して変数を設定する方法に入る前に、いくつかの基本を理解する必要があります。
Type
: 変数の型。変数の型を取得するには、reflect.TypeOf()
メソッドを使用します。 Value
: これは変数の値として理解でき、変数の値は reflect.ValueOf()
メソッドを使用して取得できます。 reflect.Value
次のプロパティが存在します:
Kind()
: 値の型、戻り値を取得します。値は reflect.Kind
タイプです。 Int()
、Float()
、Bool()
、String()
、バイト()
、Interface()
など: 対応する値を取得します。 Set()
: 値を設定しますが、現在の値が設定可能なタイプであることを確認する必要があります。詳細については、reflect.Value.Set()
を参照してください。 反射設定値
反射設定変数は主に次の手順に分かれています。
を取得します。変数reflect.Value
value; reflect.Value.Set()
メソッドで変更できます; サンプルコードを例として挙げます:
type Person struct { Name string Age int } func main() { p := Person{ Name: "John", Age: 25, } v := reflect.ValueOf(p) if v.Kind() == reflect.Struct { name := v.FieldByName("Name") age := v.FieldByName("Age") if name.IsValid() && name.CanSet() { name.SetString("Tom") } if age.IsValid() && age.CanSet() { age.SetInt(30) } } fmt.Println(p) }
その中には:
変数は
reflect です。 Value 型を入力し、変数
p の
Value を取得します;
Name と
Age の
reflect.Value 値;
と
かどうかを決定します。 age は設定可能です 値は有効性と設定可能性を満たしている必要があります 詳細は
reflect.Value.CanSet();
Name および
Age プロパティの変更。
panic 例外がスローされます。
以上がgolangリフレクション設定変数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。