在Go語言中,序列化和反序列化通常是透過將資料轉換為位元組流(或其他可傳輸的格式)來實現的。以下是幾種常用的序列化和反序列化方法:
- JSON序列化和反序列化:Go語言內建了標準庫encoding/json,可以使用json.Marshal()將數據結構序列化為JSON格式的位元組流,使用json.Unmarshal()將JSON格式的位元組流反序列化為資料結構。
import "encoding/json" // 序列化为JSON data, err := json.Marshal(obj) // 反序列化JSON err = json.Unmarshal(data, &obj)
- XML序列化與反序列化:Go語言內建了標準庫encoding/xml,可以使用xml.Marshal()將資料結構序列化為XML格式的位元組流,使用xml.Unmarshal()將XML格式的位元組流反序列化為資料結構。
import "encoding/xml" // 序列化为XML data, err := xml.Marshal(obj) // 反序列化XML err = xml.Unmarshal(data, &obj)
- gob序列化和反序列化:Go語言內建了標準庫encoding/gob,可以使用gob.NewEncoder()和gob.NewDecoder()建立編碼器和解碼器,分別呼叫Encode()和Decode()方法進行序列化和反序列化。
import "encoding/gob" // 序列化为字节流 var buffer bytes.Buffer encoder := gob.NewEncoder(&buffer) err = encoder.Encode(obj) data := buffer.Bytes() // 反序列化字节流 decoder := gob.NewDecoder(bytes.NewReader(data)) err = decoder.Decode(&obj)
- Protocol Buffers(protobuf)序列化和反序列化:Go語言提供了第三方函式庫github.com/golang/protobuf/proto,可以使用protobuf協議進行高效的序列化和反序列化。
import "github.com/golang/protobuf/proto" // 序列化为字节流 data, err := proto.Marshal(obj) // 反序列化字节流 err = proto.Unmarshal(data, obj)
以上是一些常用的序列化和反序列化方法,根據特定需求和場景選擇適合的方法。