Go では、カスタム型をシリアル化する方法は次のとおりです。JSON シリアル化を使用する場合は json.Marshaler インターフェイスを実装し、Gob シリアル化を使用する場合はエンコーディング/gob パッケージに GobEncoder および GobDecoder インターフェイスを実装します。
Golang を使用してカスタム型をシリアル化する
Golang では、シリアル化とは、オブジェクトの状態を保存または送信できる形式に変換することを指します。カスタム タイプの場合、encoding/json
または encoding/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
インターフェイスを実装し、MarshalJSON
メソッドを実装します。 MarshalJSON
メソッドはカスタム タイプの値を受け取り、その JSON 表現を返します。 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) }🎜🎜Gob シリアル化の使用🎜🎜
encoding/gob
パッケージに GobEncoder
を実装し、 GobDecoder
インターフェイス。 🎜GobEncode
メソッドはカスタム タイプの値を受け取り、それをバッファーに書き込みます。 🎜GobDecode
メソッドはバッファからデータを読み取り、カスタム タイプの値を復元します。 🎜🎜🎜🎜実際のケース: シリアル番号は複雑な構造です🎜🎜rrreee以上がGolang を使用するときにカスタム型をシリアル化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。