文字列を渡しても文字列へのポインタを渡しても、文字列を得る方法。
例えば関数の引数として 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