k01ken’s b10g

He110 W0r1d!

関数の引数に任意の構造体を渡す

開発環境はWindows10 Professional(64bit) + go1.15.3 windows/amd64


任意の構造体のポインタを関数に渡して、その関数内で、値を書き換えたいと思います。

package main

import(
  "fmt"
  "reflect"
)

type A struct{
  Name string
}

type B struct{
  Name string
}

func AnyStruct(as interface{}){
  v := reflect.Indirect(reflect.ValueOf(as))
  t := v.Type()
  v.FieldByName(t.Field(0).Name).SetString("C")
}

func main(){
  a := A{Name: "A"}
  b := B{Name: "B"}
  AnyStruct(&a)
  AnyStruct(&b)
  fmt.Println(a)
  fmt.Println(b)
}

実行結果
f:id:k01ken:20210102224957p:plain


■参考リンク
Go 言語 reflect チートシート - Qiita