編組json.RawMessage:揭示Base64 編碼背後的原因
在這個有趣的場景中,您在嘗試執行以下操作時遇到了異常行為編組json.RawMessage 實例。令人驚訝的是,您沒有獲得預期的未編碼 JSON 字串,而是遇到了精心設計的 Base64 編碼版本。為了解開這個謎團,讓我們深入研究底層機制。
必須認識到,在 json.RawMessage 上使用 Marshal 函數時,關鍵因素在於確保輸入值位於事實上是一個指標。這種看似微妙的差異在 json.RawMessage 的行為中起著關鍵作用。
正如您正確指出的那樣,json.RawMessage 的 MarshalJSON 實作旨在簡單地返回底層位元組切片。但是,如果輸入值不是指針,Marshal 函數會在輸出之前自動對位元組切片套用 Base64 編碼。
要修正這種情況並獲得所需的結果,解決方案很簡單,只需傳遞指向 json.RawMessage 的指標即可。透過這樣做,您可以有效地指示 Marshal 函數直接對底層位元組切片進行操作,從而繞過不需要的 Base64 編碼過程。
考慮以下修改後的程式碼片段:
透過實施這一微妙但重要的變更後,您現在可以自信地預期預期結果:
此修改後的程式碼符合Marshal 函數對基於指標的輸入值的要求,有效消除了不需要的Base64 編碼。有了這些新發現的知識,您現在可以自信地應對類似的挑戰,並確保 Go 應用程式中實現所需的 JSON 編組行為。
以上是為什麼我的「json.RawMessage」編組是 Base64?的詳細內容。更多資訊請關注PHP中文網其他相關文章!