reflectパッケージで構造体情報を取得


reflectパッケージ

GO言語におけるreflectパッケージですが、
発生遅くありません?

思いついてから実装まで一体何フレかかってんだと。
特にしばらく実装から離れていると、さらに時間がかかりますよね。

そこで、そこらへんを少しずつTipsとしてまとめていければと思ってます。

構造体の変数名とタグを取得

package main

import (
    "fmt"
    "reflect"
)

// 構造体
type Skill struct{
    p int64 `tag:"弾拳"`
    pp int64 `tag:"烈掌"`
    ppk int64 `tag:"烈空脚"`
}

// 構造体情報を出力
func do(I interface{}) {
    v := reflect.ValueOf(I)
    t := v.Type()
    for i := 0; i < t.NumField(); i++ {
        name := t.Field(i).Name
        tag := t.Field(i).Tag.Get("tag")
        fmt.Println("name="+name+" tag="+tag)
    }
}

// メイン処理
func main() {
    do(Skill{})
}

現場からは以上です。