search
LoginSignup
23

More than 3 years have passed since last update.

posted at

updated at

Go で interface {} の中身がポインタならその参照先を取得する

文字列を渡しても文字列へのポインタを渡しても、文字列を得る方法。

例えば関数の引数として interface {} な変数を受け取ったとして、
その中身が文字列 "abc" ならその値を、中身が文字列 "abc" へのポインタならその参照先である "abc" を取得する。

func dereferenceIfPtr(value interface{}) interface{} {
    return reflect.Indirect(reflect.ValueOf(value)).Interface()
}

実行例は以下の場所にあります。
https://play.golang.org/p/U6_5C16O-rI

以前書いていたモノ

func dereferenceIfPtr(value interface{}) interface{} {
    if reflect.TypeOf(value).Kind() == reflect.Ptr {
        return reflect.ValueOf(value).Elem().Interface()
        //return *value
        //=> invalid indirect of value (type interface {})
    } else {
        return value
    }
}

実行例は以下の場所にあります。
https://play.golang.org/p/1vFSqzDmA0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
23