2016-08-22 11 views
3

私はPythonのような辞書を作ろうとしています。私が試した:Goで辞書のようなPythonを作成するには?

var chunk = map[string]string{ 
    "code": "5000", 
    "error": err, 
} 

var payload = map[string]string{ 
    "type": "response", 
    "error": chunk, 
} 

を、私はまた、あなたが作成している

var payload = map[string]string{ 
    "type": "response", 
    "error": { 
     "code": "5000", 
     "error": err, 
    }, 
} 

答えて

10

移動は静的型付けされた言語です。したがって、ダイナミックマップを作成することはできません。マップをmap[string]stringと定義して、マップキーと値を文字列にする必要があります。

map[string]interface{}を使用すると、マップを動的に使用できます。しかし、あなたが望むタイプでそれをキャストするために必要な値を使うときはいつでも。一例として、

chunk := map[string]interface{}{ 
    "code": "5000", 
    "error": err, 
    "a": 5, 
    "b": 7, 
} 

intvalue := chunk["a"].(int) 
0

マップがマップ[文字列]文字列です試してみました。おそらくmap [string] interface {}の代わりに汎用ポインタ型を指定します。

ここに*チャンクと文字列を強制するには、キャストと構文的な砂糖が必要です。ちょっと試してみてください:-)

1

@sadlilは、正しい答えを与えました。しかし、もう1つのケースを追加したいと思います。 Pythonで

、辞書には値が、また、キーだけではないが、同じ辞書内の別のタイプにすることができ、このあまりに

dict = {"key1":"value", 1: "one", "key2": 2, (1,2,3): False} 

のようにすることができます。

文字列キーが常に必要な場合は、このmap[string]interface{}が適切な回答を返します。

しかし、より多くのpython-のような辞書を作るために、あなたもplayground

でこの

map[interface{}]interface{} 

type AB struct { 
    data string 
} 
var ab = AB{data: "data"} 
var pyLikeDict = map[interface{}]interface{}{ 
    "key1": "value", 
    1:  "one", 
    "key2": 2, 
    true: "true", 
    ab:  false, 
} 

for key, value := range pyLikeDict { 
    fmt.Printf("%v -> %v\n", key, value) 
} 

// key1 -> value 
// 1 -> one 
// key2 -> 2 
// true -> true 
// {data} -> false 

参照を行うことができます

関連する問題