2 回答

TA貢獻1790條經驗 獲得超9個贊
Marshal
( ) 是( Unmarshal
) 的包裝。它們主要是便利功能,為較低級別的編碼器/解碼器實現提供方便的接口。Encoder
Decoder
如果您需要處理包含多個 JSON 文檔的 JSON 流,或者如果您需要處理 JSON 流而不將整個文檔解組為內存結構,請使用解碼器。如果您有Reader
,則可以使用Decoder
代替Unmarshal
。
同樣,如果您正在生成沒有內存結構的 JSON 流,或者正在將多個 JSON 文檔寫入一個流,請使用Encoder
. 如果您有Writer
,則可以使用編碼器,而無需先將其解組為字節數組,然后再寫入。

TA貢獻1802條經驗 獲得超5個贊
有三個不同之處。
應用程序可以在編碼器上設置編碼選項。例如SetEscapeHTML和SetIndent。Marshal 函數沒有選項。
[]byte
Marshal 函數將 JSON 文檔編碼為必須在內存中的單個文檔。編碼器將數據寫入底層io.Writer,從而避免將整個編碼文檔保存在內存中。為了支持JSON 文檔流,編碼器在每個 JSON 文檔之后添加一個空白字節。有關差異,請參見https://play.golang.org/p/Apb5GJeEcQq。JSON 解析器會忽略額外的空格。
如果 Marshal 函數和 Encoder 類型之間的特征差異不能決定它們之間的選擇,那么使用最方便的那個。Marshal 函數和 Encoder 類型共享它們的大部分實現并且具有相似的性能。Marshal 函數不是 Encoder 的包裝器,正如另一個答案中所聲稱的那樣。
- 2 回答
- 0 關注
- 289 瀏覽
添加回答
舉報