2 回答

TA貢獻1862條經驗 獲得超6個贊
首先,我們必須了解編碼過程實際上并不意味著它會翻譯types
并返回 a 的 JSON 表示type
。為您提供 JSON 表示的過程稱為編組過程,可以通過調用json.Marshal 函數來完成。
另一方面,Encoding過程意味著我們想要獲取 any 的 JSON 編碼type
并將其寫入(編碼)到實現 io.Writer 接口的流上。正如我們所見,func NewEncoder(w io.Writer) *Encoder
接收一個io.Writer
接口作為參數并返回一個*json.Encoder
對象。調用該方法時encoder.Encode()
,它會執行 Marshaling 過程,然后將結果寫入我們在創建新 Encoder 對象時傳遞的 io.Writer 中。你可以在這里看到 json.Encoder.Encode() 的實現。
所以,如果你問是誰對 http 流進行編碼處理,答案是http.ResponseWriter
. ResponseWriter 實現了 io.Writer 接口,在Encode()
調用該方法時,編碼器會將對象編組為 JSON 編碼表示,然后調用func Write([]byte) (int, error)
io.Writer 接口的一個契約方法,它會對http 流。
總之,我可以說 Marshal 和 Unmarshal 意味著我們想要獲得任何類型的 JSON 表示,反之亦然。而編碼意味著我們要進行編組處理,然后將結果寫入(編碼)到任何流對象。而解碼意味著我們想要從任何流中獲取(解碼)一個 json 對象,然后執行 Unmarshaling 過程。

TA貢獻1821條經驗 獲得超6個贊
json.Encoder
調用產生的json.NewEncoder
直接以 UTF-8 產生其輸出。無需轉換。(事實上,Go 沒有與 UTF-8 編碼的字節序列不同的文本數據表示形式——即使 astring
只是底層的不可變字節數組。)Go 使用術語編碼進行序列化和解碼用于反序列化,無論序列化形式是二進制形式還是文本形式。不要過多考慮術語——將encode和seralise視為同義詞。
- 2 回答
- 0 關注
- 859 瀏覽
添加回答
舉報