2014-06-16 42 views
1

是否可以傳遞一個將多個值直接返回給僅接受一個值的函數的結果表單函數?示例:將多個返回函數的結果傳遞給另一個只帶一個參數的結果

func MarshallCommandMap(mapToMarshall map[string]string) string { 
    return string(json.Marshal(mapToMarshall)) 
} 

上面的示例將導致編譯錯誤:multiple-value json.Marshal() in single-value context。我知道這是可能得到相同的結果與附加變量:

func MarshallCommandMap(mapToMarshall map[string]string) string { 
    marshaledBytes, marshalingError := json.Marshal(mapToMarshall) 
    if (marshalingError != nil) { 
     panic(marshalingError) 
    } 
    return string(marshaledBytes) 
} 

但有可能將照片直接通過只有第一沒有任何價值的變量?

回答

3

我想你的意思是做一些像Python的元組解包。 不幸的是,這在Go(AFAIK)中是不可能的。

2

不,你不能,但是你的代碼有兩件事。

  1. 不應該恐慌,要麼返回一個錯誤,要麼返回一個空字符串。
  2. 可以縮短。

實施例:

func MarshallCommandMap(mapToMarshall map[string]string) string { 
    js, _ := json.Marshal(mapToMarshall) //ignore the error 
    return string(js) 
} 
+1

Panicing可能是在這樣的其中元帥不應該返回一個錯誤的情況下,適當的(具有'映射[字符串] string'作爲輸入,它應該沒有問題)。默默地吃這個錯誤似乎更糟。 –

相關問題