首頁 後端開發 Golang 使用 Golang 時如何對自訂類型進行序列化?

使用 Golang 時如何對自訂類型進行序列化?

Jun 03, 2024 pm 05:07 PM
序列化 自訂類型

在 Go 中,序列化自訂類型的方法有:使用 JSON 序列化時實作 json.Marshaler 接口,使用 Gob 序列化時實作 encoding/gob 套件中的 GobEncoder 和 GobDecoder 介面。

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

使用Golang 對自訂類型進行序列化

在Golang 中,序列化是指將物件的狀態轉換為可儲存或傳輸的格式。對於自訂類型,需要實作 encoding/jsonencoding/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 方法從緩衝區讀取資料並恢復自訂類型的值。

實戰案例:序號一個複雜結構

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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

在Java中,我們如何使用flexjson序列化物件清單? 在Java中,我們如何使用flexjson序列化物件清單? Sep 05, 2023 pm 11:09 PM

Flexjson是一個輕量級函式庫,用於序列化和反序列化Java物件>和來自JSON格式。我們可以使用JSONSerializer類別的serialize()方法序列化物件清單。此方法可以對目標實例執行淺層序列化。我們需要將清單類型的物件清單作為參數傳遞給serialize()方法。語法publicStringserialize(Objecttarget)範例importflexjson.JSONSerializer;importjava.util.*;publicclassJsonSerial

Java序列化如何影響效能? Java序列化如何影響效能? Apr 16, 2024 pm 06:36 PM

序列化对Java性能的影响:序列化过程依赖于反射,会显著影响性能。序列化需要创建字节流存储对象数据,导致内存分配和处理成本。序列化大对象会消耗大量内存和时间。序列化后的对象在网络上传输时会增加负载量。

C++ 函式庫如何進行序列化與反序列化? C++ 函式庫如何進行序列化與反序列化? Apr 18, 2024 am 10:06 AM

C++函式庫序列化和反序列化指南序列化:建立輸出流並將其轉換為存檔格式。將物件序列化到存檔中。反序列化:建立輸入流並將其從存檔格式還原。從存檔中反序列化物件。實戰範例:序列化:建立輸出流。建立存檔物件。建立物件並將其序列化到存檔中。反序列化:建立輸入流。建立存檔物件。建立物件並從存檔中反序列化。

PHP資料處理技巧:如何使用serialize與unserialize函數實作資料序列化與反序列化 PHP資料處理技巧:如何使用serialize與unserialize函數實作資料序列化與反序列化 Jul 29, 2023 am 10:49 AM

PHP資料處理技巧:如何使用serialize和unserialize函數實現資料序列化與反序列化序列化和反序列化是電腦科學中常用的資料處理技巧之一。在PHP中,我們可以使用serialize()和unserialize()函數來實現資料的序列化和反序列化操作。本文將為您詳細介紹如何使用這兩個函數,並提供相關程式碼範例。一、什麼是序列化和反序列化在電腦編

C++ 函數在傳回自訂類型時有什麼要求? C++ 函數在傳回自訂類型時有什麼要求? Apr 19, 2024 pm 03:33 PM

C++函數可以傳回自訂類型,滿足以下要求:類型完整定義。預設構造函數。值類型需要複製建構函式。

如何使用 Go 語言定義和使用自訂類型? 如何使用 Go 語言定義和使用自訂類型? Jun 05, 2024 pm 12:41 PM

在Go中,自訂類型可使用type關鍵字定義(struct),包含命名欄位。它們可以透過欄位存取運算子訪問,並可附加方法來操作實例狀態。在實際應用中,自訂類型用於組織複雜資料和簡化操作。例如,學生管理系統使用自訂類型Student儲存學生訊息,並提供計算平均成績和出席率的方法。

Java 中介面和抽象類別的序列化和反序列化 Java 中介面和抽象類別的序列化和反序列化 May 02, 2024 am 08:33 AM

介面無法直接序列化,抽象類別可以序列化但前提是不包含非靜態、非瞬態欄位或覆寫writeObject()和readObject()方法,具體實例可透過實作介面的具體類別或覆寫writeObject()和readObject ()方法的抽象類別實作。

如何使用Java中的Jackson函式庫對屬性的順序進行序列化? 如何使用Java中的Jackson函式庫對屬性的順序進行序列化? Aug 28, 2023 pm 12:45 PM

@JsonPropertyOrder是在類別層級使用的註解。它採用字段列表作為屬性,該列表定義字段在物件JSON序列化生成的字串中出現的順序。可以先序列化註釋聲明中包含的屬性(按定義的順序),然後序列化定義中未包含的任何屬性。語法public@interfaceJsonPropertyOrder範例importcom.fasterxml.jackson.core.*;importcom.fasterxml.jackson.databind.*;importcom.fasterxml.jac

See all articles