1. ホーム
  2. go

[解決済み] Goで実行時に構造体の型から新しいインスタンスを作成するにはどうすればよいですか?

2023-04-22 10:07:59

質問

Goでは、実行時にオブジェクトの型からどのようにインスタンスを作成するのでしょうか。 また、実際の type を取得する必要があると思いますが?

私はメモリを節約するために遅延インスタンス化をしようとしています。

どのように解決するのですか?

そのためには reflect .

package main

import (
    "fmt"
    "reflect"
)

func main() {
    // one way is to have a value of the type you want already
    a := 1
    // reflect.New works kind of like the built-in function new
    // We'll get a reflected pointer to a new int value
    intPtr := reflect.New(reflect.TypeOf(a))
    // Just to prove it
    b := intPtr.Elem().Interface().(int)
    // Prints 0
    fmt.Println(b)

    // We can also use reflect.New without having a value of the type
    var nilInt *int
    intType := reflect.TypeOf(nilInt).Elem()
    intPtr2 := reflect.New(intType)
    // Same as above
    c := intPtr2.Elem().Interface().(int)
    // Prints 0 again
    fmt.Println(c)
}

intの代わりにstruct型でも同じことができます。その他にも、本当に何でも。ただ、マップ型とスライス型に関しては、newとmakeの区別は必ず知っておいてください。