ホームページ >バックエンド開発 >Golang >golang 構造体をバイトに変換する

golang 構造体をバイトに変換する

WBOY
WBOYオリジナル
2023-05-10 22:54:361611ブラウズ

プログラミングでは、データのシリアル化と逆シリアル化は非常に一般的なタスクです。 Golang では、標準ライブラリの「encoding/binary」パッケージを使用してデータ構造をバイト シーケンスに変換できます。これは、データの送信や保存に特に役立ちます。この記事では、Golang を使用して構造体をバイト列に変換する方法を紹介します。

1. Golang の構造

Golang では、構造とは、さまざまなデータ型を組み合わせてより複雑なデータ型を形成できるようにするユーザー定義のデータ構造です。構造体を定義するための構文は次のとおりです:

type 结构体名 struct {
  字段名1 数据类型1
  字段名2 数据类型2
  ……
}

たとえば、人の情報を表す Person 構造体を定義できます:

type Person struct {
  Name string
  Age int
  Height float64
}

2. Golang のバイト シーケンス
Golang の場合では、バイト スライスを使用してバイト シーケンスを表すことができます。これにより、データ構造をバイト シーケンスにシリアル化し、送信またはファイルに保存できます。たとえば、次のステートメントを使用して空のバイト スライスを作成できます:

b := make([]byte, 0)

3. 構造をバイト シーケンスに変換します

Golang の "encoding/binary" パッケージは、次のセットを提供します。 Golang のデータ型をバイト列に変換する関数。構造体の場合、「binary.Write」関数を使用してバイトのシーケンスに変換できます。以下に例を示します。

package main

import (
  "encoding/binary"
  "fmt"
)

type Person struct {
  Name string
  Age int
  Height float64
}

func main() {
  p := Person{"Tom", 20, 1.8}
  b := make([]byte, 0)

  binary.Write(&b, binary.LittleEndian, p)

  fmt.Println(b)
}

この例では、Person 構造体を作成し、バイナリ モードを使用してそれをバイト スライスにシリアル化し、バイト スライスを出力します。出力結果は次のとおりです。

[3 84 111 109 20 0 0 0 0 0 0 0 0 0 0 0 236 81 184 30 133 235 64]

出力結果は、実際には「Tom」、「20」、および「1.8」をバイト シーケンスに変換した結果です。ここではバイナリ モードが使用され、リトル エンディアン モードが使用されます (つまり、下位バイトが開始位置に格納されます)。

生成されたバイト シーケンスには、構造体のフィールド名と型情報が含まれていることがわかります。データ構造を正しく復元するには、この情報を逆シリアル化中に知る必要があるためです。

4. バイト シーケンスを構造体に変換する

バイト シーケンスを構造体に逆シリアル化するには、「binary.Read」関数を使用できます。以下に例を示します。

package main

import (
  "bytes"
  "encoding/binary"
  "fmt"
)

type Person struct {
  Name   string
  Age    int
  Height float64
}

func main() {
  p := Person{"Tom", 20, 1.8}
  b := make([]byte, 0)

  binary.Write(&b, binary.LittleEndian, p)

  out := new(Person)
  buf := bytes.NewReader(b)
  binary.Read(buf, binary.LittleEndian, out)

  fmt.Printf("%+v", *out)
}

この例では、まず「binary.Write」を使用して Person 構造体をバイト スライスにシリアル化します。次に、「bytes.NewReader」を使用してバイトをバッファーにスライスしました。最後に、「binary.Read」関数を使用して、バッファー内のデータを新しい Person 構造体に読み取り、結果を出力します。

この例の出力は次のとおりです:

{Name:"Tom", Age:20, Height:1.8}

これは、バイト シーケンスが Person 構造体に正常に逆シリアル化されたことを示します。

概要

Golang では、「encoding/binary」パッケージを使用してデータ構造をバイト シーケンスに変換できます。これは、データを他のコンピュータに転送したり、ファイルに保存したりできるため、非常に便利です。構造体をバイトのシーケンスに変換するには、「binary.Write」関数を使用できます。バイトのシーケンスを構造体に逆シリアル化するには、「binary.Read」関数を使用できます。これらの関数は、さまざまなデータ型を処理し、さまざまなエンディアンをサポートできます。

この記事が Golang で構造体をバイト列に変換するのに役立つことを願っています。

以上がgolang 構造体をバイトに変換するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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