Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menyusun jenis tersuai apabila menggunakan Golang?

Bagaimana untuk menyusun jenis tersuai apabila menggunakan Golang?

WBOY
WBOYasal
2024-06-03 17:07:00782semak imbas

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.

使用 Golang 时如何对自定义类型进行序列化?

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 包中的 GobEncoderGobDecoder 接口。
  • GobEncode 方法接收自定义类型的值并将其写入一个缓冲区。
  • GobDecode
Gunakan siri JSON

  • Laksanakan antara muka json.Marshaler dan laksanakan kaedah MarshalJSON.

  • Kaedah 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)
    }
    🎜🎜Menggunakan pensirilan Gob🎜🎜
    • Laksanakan GobEncoderdalam pakej encoding/gob > dan antara muka GobDecoder. 🎜
    • Kaedah GobEncode menerima nilai jenis tersuai dan menulisnya pada penimbal. 🎜 Kaedah
    • GobDecode membaca data daripada penimbal dan memulihkan nilai jenis tersuai. 🎜🎜🎜🎜Kes praktikal: nombor siri ialah struktur yang kompleks🎜🎜rrreee
  • Atas ialah kandungan terperinci Bagaimana untuk menyusun jenis tersuai apabila menggunakan Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan:
    Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn