在 go 中,序列化自定义类型的方法有:使用 json 序列化时实现 json.marshaler 接口,使用 gob 序列化时实现 encoding/gob 包中的 gobencoder 和 gobdecoder 接口。
使用 Golang 对自定义类型进行序列化
在 Golang 中,序列化是指将对象的状态转换为可存储或传输的格式。对于自定义类型,需要实现 encoding/json 或者 encoding/gob 包中的序列化接口。
使用 JSON 序列化
立即学习“go语言免费学习笔记(深入)”;
实现 json.Marshaler 接口,实现 MarshalJSON 方法。MarshalJSON 方法接收自定义类型的值并返回其 JSON 表示。
实战案例:序列号员工结构体
package mainimport ( "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 mainimport ( "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 时如何对自定义类型进行序列化?的详细内容,更多请关注【创想鸟】其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2339446.html