Dalam Go, kaedah untuk mensiri jenis tersuai ialah: melaksanakan antara muka json.Marshaler apabila menggunakan pensirilan JSON dan melaksanakan antara muka GobEncoder dan GobDecoder dalam pakej pengekodan/gob apabila menggunakan pensirilan Gob.
Sirikan jenis tersuai menggunakan Golang
Di Golang, siri merujuk kepada menukar keadaan objek kepada format yang boleh disimpan atau dihantar. Untuk jenis tersuai, anda perlu melaksanakan antara muka bersiri dalam pakej pengekodan/json
atau pengekodan/gob
. encoding/json
或者 encoding/gob
包中的序列化接口。
使用 JSON 序列化
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
json.Marshaler
dan laksanakan kaedah MarshalJSON
.
MarshalJSON
menerima nilai jenis tersuai dan mengembalikan perwakilan JSONnya. 🎜🎜🎜Kes praktikal: Struktur pekerja nombor bersiri🎜🎜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) }
GobEncoder
dalam pakej encoding/gob
> dan antara muka GobDecoder
. 🎜GobEncode
menerima nilai jenis tersuai dan menulisnya pada penimbal. 🎜 KaedahGobDecode
membaca data daripada penimbal dan memulihkan nilai jenis tersuai. 🎜🎜🎜🎜Kes praktikal: nombor siri ialah struktur yang kompleks🎜🎜rrreeeAtas ialah kandungan terperinci Bagaimana untuk menyusun jenis tersuai apabila menggunakan Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!