概要
以下は自分用のメモです。よく忘れるので、ここにメモメモ。。
Goで実行時に型を動的に知りたいというのは、個人的にあまり出番がないのですが、必要なときもあります。
サンプル
package reflects import ( "errors" "fmt" "reflect" "github.com/devlights/gomy/output" ) // FindType -- 実行時に型を求めるやり方についてのサンプルです // // REFERENCES: // - https://stackoverflow.com/questions/20170275/how-to-find-the-type-of-an-object-in-go // - https://pkg.go.dev/reflect func FindType() error { type ( MyType struct { Value int } ) var ( v = MyType{100} ) // // 1. 文字列フォーマットの機能を利用 // t1 := fmt.Sprintf("%T", v) output.Stdoutl("[string formatting]", t1) // // 2. reflect.TypeOf を利用 // t2 := reflect.TypeOf(v).String() output.Stdoutl("[reflect typeof]", t2) // // 3. type assertions を利用 // var ( obj interface{} = v ) switch obj.(type) { case MyType: output.Stdoutl("[type assertsion]", "reflects.MyType") default: return errors.New("型がおかしい") } return nil }
実行すると以下のようになります。
gitpod /workspace/try-golang (master) $ make run go run github.com/devlights/try-golang/cmd/trygolang -onetime -example "" ENTER EXAMPLE NAME: reflect_find_type [Name] "reflect_find_type" [string formatting] reflects.MyType [reflect typeof] reflects.MyType [type assertsion] reflects.MyType [Elapsed] 19.99µs
try-golang/find_type.go at master · devlights/try-golang · GitHub
参考情報
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。