編碼與解碼
Go 標準庫序列化:JSON 與 XML。
JSON
json.Marshal - 序列化 (Serialization)
將 Go 的資料結構轉換成 JSON 字串:物件 → 字串
json.Unmarshal - 反序列化 (Deserialization)
將 JSON 字串轉換回 Go 的資料結構:字串 → 物件
Struct Tags
| Tag | 說明 |
|---|---|
json:"欄位名稱" | 自定義欄位名稱 |
json:",omitempty" | 空值處理(空字串, 0, nil…等) |
json:"-" | 欄位排除 |
json:",string" | 型別轉換 |
json:"欄位名稱,omitempty" | 組合選項 |
json:"欄位名稱,string" | 自定義名稱並轉換為字串 |
特殊用途
| Tag | 說明 |
|---|---|
json:">屬性" | 允許在欄位名稱中使用特殊字元 |
json:",raw" | 保留原始 JSON 訊息(與 json.RawMessage 一起使用) |
XML
Struct Tags
| Tag | 說明 |
|---|---|
xml:"名稱" | 定義 XML 元素的名稱 |
xml:"名稱,attr" | 將欄位定義為 XML 屬性而非元素 |
xml:"父元素>子元素" | 定義 XML 的巢狀結構關係 |
xml:",innerxml" | 將內容視為原始 XML 處理 |
xml:",any" | 用於處理任意 XML 元素 |
xml:"-" | 忽略該欄位,不進行 XML 序列化 |
xml:",omitempty" | 當欄位為空值時省略 |
xml:",cdata" | 將內容包裝在 CDATA 區段中 |
xml:"namespace 名稱" | 定義 XML 命名空間 |
xml:"namespace:元素" | 使用特定命名空間的元素 |