いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

Goメモ-183 (Goで実行時に型を知るためのやり方メモ)

概要

以下は自分用のメモです。よく忘れるので、ここにメモメモ。。

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

参考情報

stackoverflow.com


過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。