2016-07-20 10 views
0

は、私はそうのようなマップのキーを取得するための一般的な関数を記述しようとしていますか? B)この関数を呼び出すとき、元のマップタイプを[interface {}] interface {}にマッピングするにはどうすればよいですか?鋳造マップタイプ

答えて

1

既存のマップをmap[interface{}]interface{}にキャストすることはできません。あなたは、リフレクションを利用することがあります:

例作業
func MapKeys(theMap interface{}) ([]interface{}, error) { 
    if theMap == nil { 
     return nil,errors.New("MapKeys arg is nil") 
    } 

    v := reflect.ValueOf(theMap) // v is now a reflect.Value type 
    if v.Kind() != reflect.Map { 
     return nil, errors.New("Argument is not a map") 
    } 
    var keys = make([]interface{}, v.Len(), v.Len()) 

    for i, key := range v.MapKeys() { 
     keys[i] = key.Interface() // key is also a reflect.Value, key.Interface() 
            // converts it back into an interface 
    } 
    return keys, nil 
} 

https://play.golang.org/p/h9ZfnLHXgX

+0

私は(reflect.Value.MapKeysを認識していませんでした)。基本的なライブラリをまだ学んでいます。ありがとう! –