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

使用 Golang 对自定义类型进行序列化
在 Golang 中,序列化是指将对象的状态转换为可存储或传输的格式。对于自定义类型,需要实现 encoding/json 或者 encoding/gob 包中的序列化接口。
使用 JSON 序列化
立即学习“go语言免费学习笔记(深入)”;
自定义设置的程度更高可以满足大部分中小型企业的建站需求,同时修正了上一版中发现的BUG,优化了核心的代码占用的服务器资源更少,执行速度比上一版更快 主要的特色功能如下: 1)特色的菜单设置功能,菜单设置分为顶部菜单和底部菜单,每一项都可以进行更名、选择是否隐 藏,排序等。 2)增加企业基本信息设置功能,输入的企业信息可以在网页底部的醒目位置看到。 3)增加了在线编辑功能,输入产品信息,企业介绍等栏
- 实现
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)
}









