Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
23
Help us understand the problem. What are the problem?

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
23
Help us understand the problem. What are the problem?