2017-04-12 101 views
0

我試圖從地圖內的地圖檢索值。我遵循在線教程,但沒有得到正確的答案。這是我的程序:從golang中的嵌套地圖檢索值

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) 
    } 
} 

選項有兩個鍵data1和data2。在for循環以下

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

中的printf版畫當我運行代碼

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

我在opt越來越nil。我不知道如何檢索map[h:5]的價值。

+1

請向我們展示代碼如何構造嵌套地圖。 – nemo

+0

我沒有構建它。這張地圖由docker構建。順便說一句,即時獲得正確的價值觀[h:5],但我不知道如何檢索內部地圖的價值。 – user3550166

+0

請養成使用['gofmt'](https://golang.org/cmd/gofmt/)的習慣。它會讓你的代碼更容易,其他人也可以閱讀。 – Flimzy

回答

0

由於您尚未使用類型OptionMap創建內部映射,因此您正在獲取內部映射的零值。您必須使用map [string] interface {}創建它並試圖斷言無法獲取nil值的OptionMap。請參見下面的例子,它也與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