2015-07-10 155 views
2

我正在將一些JSON解碼到一個結構中,並且我想處理未提供特定字段的情況。檢查一個地圖是否在Golang中初始化

結構:

type Config struct { 
    SolrHost string 
    SolrPort int 
    SolrCore string 
    Servers map[string][]int 
} 

JSON解碼:

{ 
    "solrHost": "localhost", 
    "solrPort": 8380, 
    "solrCore": "testcore", 
} 

在解碼的JSON的方法,我想檢查map[string][]int已經初始化,如果沒有,做所以。

當前代碼:

func decodeJson(input string, output *Config) error { 
    if len(input) == 0 { 
     return fmt.Errorf("empty string") 
    } 
    decoder := json.NewDecoder(strings.NewReader(input)) 
    err := decoder.Decode(output) 
    if err != nil { 
     if err != io.EOF { 
      return err 
     } 
    } 

    // if output.Server.isNotInitialized... 

    return nil 
} 

我可以利用的recover()?這是實現我的任務「最好」的方式嗎?

+0

另外,使用'err:= json.Unmarshal([] byte(input),output)更簡單。如果err!= nil {return err}'。 –

回答

8

任何地圖的zero valuenil,所以只是對證:

if output.Servers == nil { /* ... */ } 

另外,您還可以檢查它的長度。這也處理了空地圖的情況:

if len(output.Servers) == 0 { /* ... */ } 
+0

當然!現在我想起來很簡單,哈哈! – shearn89

相關問題