我的系統中有多個通過RPC進行通信的節點。我想通過RPC發送一個map [string] interface {}到另一個節點。發件人使用json.Marshal和接收器使用json.Unmarshal來獲取地圖。 讓我們在發送方說,映射包含[1] => 2其中2是類型uint32。
問題是Unmarshal嘗試查找底層數據的類型,並根據其在此處指定的默認行爲https://blog.golang.org/json-and-go將2轉換爲float64類型。之後,將float64轉換爲uint32會導致恐慌。我提到How to unmarshal json into interface{} in golang?。但爲此,我們需要知道數據的類型。在我的情況下,數據可以是任何類型,所以我想保留它作爲interface {}。如何從界面{}解組到接口{}?如何在接口{}中解組到接口{}
2
A
回答
3
不幸的是,使用encoding/json
軟件包不行,因爲沒有傳輸類型信息,並且如果類型信息不存在,默認情況下將JSON編號解組爲float64
類型的值。您需要定義struct
類型,其中您明確聲明該字段類型爲uint32
。
或者,您可以選擇使用encoding/gob
,它傳輸並保存類型信息。看到這個例子:
m := map[string]interface{}{"1": uint32(1)}
b := &bytes.Buffer{}
gob.NewEncoder(b).Encode(m)
var m2 map[string]interface{}
gob.NewDecoder(b).Decode(&m2)
fmt.Printf("%T\n%#v\n", m2["1"], m2)
輸出(嘗試在Go Playground):
uint32
map[string]interface {}{"1":0x1}
的gob
的缺點是,它是進入特定不像語言和平臺無關JSON。
相關問題
- 1. 如何組織TypeScript接口
- 2. 瞭解接口
- 3. 接口誤解
- 4. 瞭解接口
- 5. 實現接口到一個類:接口到接口
- 6. 組織接口
- 7. java中的接口接口
- 8. 在通用接口中使用接口
- 9. 在接口中實現接口屬性?
- 10. 接口與接口
- 11. 解釋Java接口?
- 12. 如何在另一個接口中實現一個接口
- 13. 解決接口中的WebAPI
- 14. 如何將許多接口分組到一個通用的單一接口?
- 15. 將接口集合添加到接口
- 16. 實現接口嚮導 - 如何找到接口的「類型庫」?
- 17. 實體框架中的接口(接口中的接口)
- 18. JAXB不解組接口列表
- 19. Castle Windsor解析通用接口數組
- 20. Golang將XML屬性解組爲接口
- 21. 如何從接口
- 22. Golang:如何在接口
- 23. 如何解決IncompatibleClassChangeError接口未實現
- 24. 如何解決JSONAPI :: Serializable接口:: UndefinedSerializableClass
- 25. 如何解決接口混亂
- 26. C#接口 - 僅實現其他接口中的接口
- 27. PHP,SPL,ArrayAccess接口接口
- 28. Java-接口使用接口
- 29. 4個接口的接口?
- 30. C#:接口:2個接口