Reflect.Type がわかっている場合、この型のインスタンスを動的に作成できます。インスタンスの型はポインターです。たとえば、reflect.Type の型が int の場合、 int ポインター、つまり
*int
を作成します。コードは次のようになります。
package main
import (
"fmt"
"reflect"
)
func main() {
var a int
// 変数aの反射型オブジェクトを取得する
typeOfA := reflect.TypeOf(a)
// 反射型オブジェクトに基づいて型のインスタンスを作成する
aIns := reflect.New(typeOfA)
// 値の型と種類を出力する
fmt.Println(aIns.Type(), aIns.Kind())
}
コード出力は次のとおりです。
*int ptr
コードの説明は次のとおりです。
- 13行目、変数aのリフレクション型オブジェクトを取得します。
- 16行目では、reflect.New()関数を使用して変数aのリフレクション型オブジェクトを渡し、この型のインスタンス値を作成し、その値をreflect.Value型として返します。この操作は new(int) と同等なので、*int 型のインスタンスを返します。
- 19 行目では、print aIns の型は *int で、型はポインターです。
「 Go 言語は型情報を通じてインスタンスを作成します」についてわかりやすく解説!絶対に観るべきベスト2動画
【たった1時間で学べる】Go言語のプログラミング初心者向けの超入門講座【文字書き起こし、ソースコードも完全無料!】
【初心者必見!】Go言語とは?できることや学ぶメリット・将来性について解説