色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

gob和json

錢艷冰1年前8瀏覽0評論

在Go語言中,有兩種常見的序列化方式:gob和json。

gob是Go語言自帶的二進制序列化方式,可以高效地處理Go語言中的各種數據類型,并支持自定義類型的序列化和反序列化。與JSON相比,gob的優點在于處理的速度更快,序列化后的數據更小,但其缺點在于無法跨平臺使用,即gob序列化的數據只能在使用相同版本的Go語言編寫的程序間傳遞。

package main
import (
"bytes"
"encoding/gob"
"fmt"
)
type Person struct {
Name  string
Age   int
Email string
}
func main() {
p := Person{"Alice", 30, "alice@example.com"}
buf := new(bytes.Buffer)
enc := gob.NewEncoder(buf)
err := enc.Encode(p)
if err != nil {
panic(err)
}
fmt.Println(buf.Bytes())
}

json是一種基于文本的序列化方式,可以跨平臺使用,支持多種編程語言,并且易于閱讀和理解。雖然相比于gob序列化后的數據大,但是在網絡傳輸中,由于大多數應用程序都使用了文本協議,因此JSON成為了一種常見的數據交換格式。

package main
import (
"encoding/json"
"fmt"
)
type Person struct {
Name  string `json:"name"`
Age   int    `json:"age"`
Email string `json:"-"`
}
func main() {
p := Person{"Alice", 30, "alice@example.com"}
b, err := json.Marshal(p)
if err != nil {
panic(err)
}
fmt.Println(string(b))
}

上面這個簡單的例子中,我們定義了一個Person結構體,并且在JSON編碼時使用了標簽來指定對應JSON對象的鍵名和是否序列化。同時,我們還可以將JSON反序列化為Go語言中的結構體:

package main
import (
"encoding/json"
"fmt"
)
type Person struct {
Name  string `json:"name"`
Age   int    `json:"age"`
Email string `json:"-"`
}
func main() {
b := []byte(`{"name":"Alice","age":30,"email":"alice@example.com"}`)
var p Person
err := json.Unmarshal(b, &p)
if err != nil {
panic(err)
}
fmt.Printf("%+v\n", p)
}