欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

gob json protobuf

老白2年前9瀏覽0評論

gob、json、protobuf 是三種常用的數據編解碼方式,它們分別具有不同的優缺點和適用場景。

gob 是 Go 自帶的二進制編碼方式,它具有高效、緊湊的優勢,但只適用于 Go 語言內部的數據傳輸和存儲。

func main() {
// 編碼
var buf bytes.Buffer
enc := gob.NewEncoder(&buf)
data := map[string]string{"name": "Tom", "gender": "Male"}
if err := enc.Encode(data); err != nil {
log.Fatal("encode error:", err)
}
fmt.Println(buf.Bytes())
// 解碼
dec := gob.NewDecoder(&buf)
var result map[string]string
if err := dec.Decode(&result); err != nil {
log.Fatal("decode error:", err)
}
fmt.Println(result)
}

json 是一種輕量級的數據交換格式,具有很好的可讀性和跨語言支持,但編解碼效率不如二進制方式。

type Person struct {
Name string `json:"name"`
Age  int    `json:"age"`
}
func main() {
// 編碼
person := Person{Name: "Tom", Age: 18}
data, err := json.Marshal(person)
if err != nil {
log.Fatal("marshal error:", err)
}
fmt.Println(string(data))
// 解碼
var result Person
if err := json.Unmarshal(data, &result); err != nil {
log.Fatal("unmarshal error:", err)
}
fmt.Println(result)
}

protobuf 是 Google 開發的一種二進制數據交換格式,與 json 相比能更好地壓縮數據、節省網絡帶寬和存儲空間,但需要通過定義 proto 文件來生成 Go 代碼。

syntax = "proto3";
package person;
message Person {
string name = 1;
int32 age = 2;
}
func main() {
// 編碼
person := &Person{Name: "Tom", Age: 18}
data, err := proto.Marshal(person)
if err != nil {
log.Fatal("marshal error:", err)
}
fmt.Println(string(data))
// 解碼
var result Person
if err := proto.Unmarshal(data, &result); err != nil {
log.Fatal("unmarshal error:", err)
}
fmt.Println(result)
}