在 Go 中,序列化自訂類型的方法有:使用 JSON 序列化時實作 json.Marshaler 接口,使用 Gob 序列化時實作 encoding/gob 套件中的 GobEncoder 和 GobDecoder 介面。
使用Golang 對自訂類型進行序列化
在Golang 中,序列化是指將物件的狀態轉換為可儲存或傳輸的格式。對於自訂類型,需要實作 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 序列化
套件中的
GobEncoder 和
GobDecoder 介面。
方法接收自訂類型的值並將其寫入緩衝區。
方法從緩衝區讀取資料並恢復自訂類型的值。
實戰案例:序號一個複雜結構
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中文網其他相關文章!