在 go 中,序列化自定义类型的方法有:使用 json 序列化时实现 json.marshaler 接口,使用 gob 序列化时实现 encoding/gob 包中的 gobencoder 和 gobdecoder 接口。

使用 Golang 对自定义类型进行序列化
在 Golang 中,序列化是指将对象的状态转换为可存储或传输的格式。对于自定义类型,需要实现 encoding/json 或者 encoding/gob 包中的序列化接口。
使用 JSON 序列化
立即学习“go语言免费学习笔记(深入)”;
json.Marshaler 接口,实现 MarshalJSON 方法。MarshalJSON 方法接收自定义类型的值并返回其 JSON 表示。实战案例:序列号员工结构体
package main
import (
"encoding/json"
"fmt"
)
// Employee is a custom type representing an employee.
type Employee struct {
Name string
Age int
Skills []string
}
// MarshalJSON implements the json.Marshaler interface.
func (e Employee) MarshalJSON() ([]byte, error) {
type Alias Employee
return json.Marshal(&struct{ Alias }{e})
}
func main() {
emp := Employee{Name: "John Doe", Age: 30, Skills: []string{"golang", "javascript"}}
encoded, err := json.Marshal(emp)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("JSON:", string(encoded))
}使用 Gob 序列化
encoding/gob 包中的 GobEncoder 和 GobDecoder 接口。GobEncode 方法接收自定义类型的值并将其写入一个缓冲区。GobDecode 方法从缓冲区读取数据并恢复自定义类型的值。实战案例:序列号一个复杂结构
package main
import (
"encoding/gob"
"fmt"
"io/ioutil"
"os"
)
// ComplexStruct represents a complex data structure.
type ComplexStruct struct {
Map map[string]int
Slice []int
InnerStruct struct {
Field1 string
Field2 int
}
}
func main() {
// Register the ComplexStruct type for serialization.
gob.Register(ComplexStruct{})
// Create a ComplexStruct instance.
cs := ComplexStruct{
Map: map[string]int{"key1": 1, "key2": 2},
Slice: []int{3, 4, 5},
InnerStruct: struct {
Field1 string
Field2 int
}{"value1", 6},
}
// Encode the ComplexStruct to a file.
f, err := os.Create("data.gob")
if err != nil {
fmt.Println("Error creating file:", err)
return
}
defer f.Close()
enc := gob.NewEncoder(f)
if err := enc.Encode(cs); err != nil {
fmt.Println("Error encoding:", err)
return
}
// Decode the ComplexStruct from the file.
data, err := ioutil.ReadFile("data.gob")
if err != nil {
fmt.Println("Error reading file:", err)
return
}
dec := gob.NewDecoder(bytes.NewReader(data))
var decoded ComplexStruct
if err := dec.Decode(&decoded); err != nil {
fmt.Println("Error decoding:", err)
return
}
// Print the decoded struct.
fmt.Println("Decoded:", decoded)
}以上就是使用 Golang 时如何对自定义类型进行序列化?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号