2017-04-12 8 views
0

マップ内のマップから値を取得しようとしています。私はオンラインチュートリアルに従ってきましたが、正解を得ていません。これは私のプログラムです:ゴランのネストマップから値を取得する

type OptionMap map[string]interface{} 
func(options OptionMap) { 
    opt, _ := options["data2"].(OptionMap) 
    fmt.Println("opt", opt) 
    for key, value := range options { 
     fmt.Println("Key:", key, "Value:", value) 
    } 
} 

オプションは、2つのキーdata1とdata2を持っています。私は、コード

opt, _ := options["data2"].(OptionMap) 

を実行すると、私はoptnilを取得しています

Key: data1 Value: false 
Key: data2 Value: map[h:5] 

を以下の内部ループ用のprintfプリント。 map[h:5]の値を取得する方法がわかりません。

+1

で型アサーションページからOptionMapタイプ、too.Goで作業している例の下を参照してください。 – nemo

+0

私はそれを構築していません。このマップはドッカーによって構築されています。ところで、私は正しい値の地図[h:5]を取得していますが、内側のマップの値を取得する方法がわかりません。 – user3550166

+0

['gofmt'](https://golang.org/cmd/gofmt/)の習慣を身につけてください。それはあなたのコードをあなたと他の人が読むのを容易にします。 – Flimzy

答えて

0

OptionMap型を使用して内部マップを作成していないため、内部マップの値が0になっています。map [string] interface {}を使用して作成し、nil値を取得できないOptionMapにアサートしようとする必要があります。私たちにあなたがネストされたマップを構築する方法のコードを表示してくださいhttps://tour.golang.org/methods/15

package main 

import "fmt" 



type OptionMap map[string]interface{} 

func main() { 
    opt := make(OptionMap) 
    ineeropt := make(OptionMap)  // while creating Map specify OptionMap type 
    ineeropt["h"]=5 
    opt["data1"] = false 
    opt["data2"] = ineeropt 
    test(opt) 


} 
func test(options OptionMap) { 
    opt, _ := options["data2"].(OptionMap) //If inner map is created using OptionMap then opt won't be nil 
    fmt.Println("opt", opt) 
    fmt.Println("opt", options) 
    for key, value := range options { 
     fmt.Println("Key:", key, "Value:", value) 
    } 
} 
+0

共有ありがとう。私はすでにそれを修正した:) – user3550166

関連する問題