Go言語でリフレクションを使用してインスタンス化する方法は何ですか?
Go言語では、reflect.New()関数を使用して特定の型のオブジェクトをインスタンス化できます。reflect.New()関数は、reflect.Typeパラメータを受け取り、その型の新しく割り当てられたゼロ値へのポインタを返します。
以下は、オブジェクトをリフレクションを使用してインスタンス化する例です。
package main
import (
"fmt"
"reflect"
)
type Person struct {
Name string
Age int
}
func main() {
pType := reflect.TypeOf(Person{})
pValue := reflect.New(pType)
p := pValue.Interface().(*Person)
p.Name = "Alice"
p.Age = 25
fmt.Println(p)
}
上記の例では、まずreflect.TypeOf()関数を使用してPersonタイプのリフレクションオブジェクトを取得します。次に、reflect.New()関数にリフレクションオブジェクトを渡し、Personタイプの新しい割り当てられたゼロ値へのポインタを返します。最後に、Interface()メソッドを使用してリフレクション値をインターフェース値に変換し、型断定を使用して*Personタイプのポインタに変換します。
結果はこちらです。
&{Alice 25}
これにより、Person型のオブジェクトが反射によってインスタンス化されました。