質問
どのようにポインタの型と値を変更できますか?リフレクションを使用したインターフェイスによって定義された変数?
Answer
Go では、インターフェイスを含め、すべてが値によって渡されます。インターフェイス値を割り当てる場合、コピーが作成され、変更の可能性が制限されます。
インターフェイス変数に格納されている値を変更するには、そのアドレスを使用する必要があります。 reflect.ValueOf(&varName).Elem() を通じて変数のアドレスにアクセスすると、新しいポインター値を変数に設定できます。
例
var a fmt.Stringer // Interface variable a = &Greeter{"John"} v := reflect.ValueOf(&a).Elem() // Access variable's address v.Set(reflect.ValueOf(&Greeter2{"Jack"})) // Set new pointer value fmt.Println(a.String()) // Hello2, My name is Jack (Greeter2.String() called)
重要なポイント
制限
以上がGo でリフレクションを使用してインターフェイス変数のポインタの型と値を変更するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。