Go语言常见序列化协议全面对比
在Go语言中,常见的序列化协议包括JSON、XML、gob、protobuf等。以下是这些协议的简单比较:
- JSON: 是一种轻量级数据交换格式,易于阅读和编写。Go标准库中的
encoding/json
包提供了对JSON的支持。
type Person struct {
Name string
Age int
}
func main() {
p := Person{"Alice", 30}
jsonBytes, _ := json.Marshal(p)
fmt.Println(string(jsonBytes))
var p2 Person
json.Unmarshal(jsonBytes, &p2)
fmt.Println(p2)
}
- XML: 与JSON类似,但是支持更丰富的数据结构,并且在某些领域(如企业应用集成)中具有重要的地位。Go标准库中的
encoding/xml
包提供了对XML的支持。
type Person struct {
XMLName xml.Name `xml:"person"`
Name string `xml:"name"`
Age int `xml:"age"`
}
func main() {
p := Person{XMLName: xml.Name{Local: "person"}, Name: "Bob", Age: 25}
xmlBytes, _ := xml.Marshal(p)
fmt.Println(string(xmlBytes))
var p2 Person
xml.Unmarshal(xmlBytes, &p2)
fmt.Println(p2)
}
- gob: 是Go自带的一种二进制序列化格式,它是可逆的,并且在Go程序内部进行跨包数据交换时非常有用。
func main() {
var network = "gob"
encoder := gob.NewEncoder(os.Stdout)
decoder := gob.NewDecoder(os.Stdin)
p := Person{"Alice", 30}
encoder.Encode(p)
var p2 Person
decoder.Decode(&p2)
fmt.Println(p2)
}
- protobuf: 是一种轻量且高效的序列化结构,由Google开发,主要用于RPC系统(如gRPC)和持续数据存储。需要先通过Protocol Buffers工具生成Go代码。
syntax = "proto3";
package example;
message Person {
string name = 1;
int32 age = 2;
}
然后使用protoc编译器生成Go代码,并在Go程序中使用。
func main() {
p := &example.Person{Name: "Bob", Age: 25}
data, _ := p.Marshal()
fmt.Println(data)
var p2 example.Person
p2.Unmarshal(data)
fmt.Println(p2)
}
每种序列化协议都有其特点,适用于不同的场景。开发者应根据具体需求选择合适的序列化协议。
评论已关闭