ホームページ  >  記事  >  バックエンド開発  >  Golang のシリアル化および逆シリアル化メソッドの予備調査

Golang のシリアル化および逆シリアル化メソッドの予備調査

王林
王林オリジナル
2024-01-28 09:03:18865ブラウズ

Golang のシリアル化および逆シリアル化メソッドの予備調査

Golang のシリアル化および逆シリアル化手法に関する予備研究

シリアル化と逆シリアル化は、コンピューター サイエンスで一般的に使用される概念であり、データ構造またはオブジェクトを次の形式に変換するプロセスを指します。ネットワーク経由で送信または保存できる形式に変換し、必要なときに元のデータ構造またはオブジェクトを取得できるようにします。 Golang では、シリアル化と逆シリアル化の実装をシンプルかつ効率的に行うための豊富なメソッドとライブラリが提供されています。

1. JSON のシリアル化と逆シリアル化

JSON (JavaScript Object Notation) は、データをテキスト形式で保存するデータ交換形式で、通常は Web アプリケーション間の送信に使用されます。 Golang では、標準ライブラリ encoding/json が、JSON のシリアル化と逆シリアル化のためのシンプルで使いやすいメソッドを提供します。

次は、構造を JSON 形式の文字列にシリアル化して出力する例です。

package main

import (
    "encoding/json"
    "fmt"
)

type Person struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

func main() {
    person := Person{
        Name: "John",
        Age:  30,
    }

    jsonData, err := json.Marshal(person)
    if err != nil {
        fmt.Println("序列化失败:", err)
        return
    }

    fmt.Println(string(jsonData))
}

上記のコードでは、名前と年齢のフィールドを含む Person 構造が定義されています。 json.Marshal メソッドを使用して Person 構造体を JSON 形式の文字列にシリアル化し、string を使用して出力用に読み取り可能な形式に変換します。

次に、JSON 文字列を構造体に逆シリアル化することもできます。次の例では、以前にシリアル化された Person 構造体の JSON 文字列を構造体オブジェクトに逆シリアル化し、それを出力します。

package main

import (
    "encoding/json"
    "fmt"
)

type Person struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

func main() {
    jsonData := `{"name":"John","age":30}`

    var person Person
    err := json.Unmarshal([]byte(jsonData), &person)
    if err != nil {
        fmt.Println("反序列化失败:", err)
        return
    }

    fmt.Printf("%+v
", person)
}

json.Unmarshal メソッドを介して JSON 文字列を逆シリアル化します。これは、構造体オブジェクトです。構造体オブジェクトの詳細情報を出力するには、fmt.Printfを使用します。

2. Gob のシリアル化と逆シリアル化

Gob は Golang のバイナリ エンコード形式で、主に異なる Go プログラム間でデータを送信するために使用されます。 JSON と比較して、Gob はより効率的であり、より多くのデータ型をサポートします。 Golang では、標準ライブラリ encoding/gob を使用して、Gob をシリアル化および逆シリアル化できます。

次は、構造体を Gob 形式のバイナリ データにシリアル化して出力する例です。

package main

import (
    "encoding/gob"
    "fmt"
    "os"
)

type Person struct {
    Name string
    Age  int
}

func main() {
    person := Person{
        Name: "John",
        Age:  30,
    }

    file, err := os.Create("person.gob")
    if err != nil {
        fmt.Println("创建文件失败:", err)
        return
    }
    defer file.Close()

    encoder := gob.NewEncoder(file)
    err = encoder.Encode(person)
    if err != nil {
        fmt.Println("序列化失败:", err)
        return
    }

    fmt.Println("序列化完成")
}

上記のコードでは、まず person.gob## という名前のファイルを開きます。 #このファイルはシリアル化された Gob データを保存するために使用されます。次に、gob.NewEncoder を使用してエンコーダーを作成し、Encode メソッドを使用して Person 構造体オブジェクトを Gob 形式のバイナリ データにシリアル化します。

次に、Gob データを構造体オブジェクトに逆シリアル化できます。以下に例を示します。

package main

import (
    "encoding/gob"
    "fmt"
    "os"
)

type Person struct {
    Name string
    Age  int
}

func main() {
    file, err := os.Open("person.gob")
    if err != nil {
        fmt.Println("打开文件失败:", err)
        return
    }
    defer file.Close()

    var person Person

    decoder := gob.NewDecoder(file)
    err = decoder.Decode(&person)
    if err != nil {
        fmt.Println("反序列化失败:", err)
        return
    }

    fmt.Printf("%+v
", person)
}

上記のコードでは、まず、以前に保存した

person.gob ファイルを開きます。次に、gob.NewDecoder を使用してデコーダを作成し、Decode メソッドを使用して Gob データを構造体オブジェクトに逆シリアル化します。

概要

この記事では、Golang のシリアル化と逆シリアル化の方法を紹介し、具体的なコード例を示します。このうち、JSON のシリアル化と逆シリアル化は

encoding/json 標準ライブラリを使用し、Gob のシリアル化と逆シリアル化は encoding/gob 標準ライブラリを使用します。 JSON であろうと Gob であろうと、Golang はシリアル化と逆シリアル化を実現するためのシンプルで使いやすいメソッドを提供しており、開発者は実際のニーズに応じてデータの変換と送信に適切なメソッドを選択できます。

以上がGolang のシリアル化および逆シリアル化メソッドの予備調査の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。