プログラミングでは、データのシリアル化と逆シリアル化は非常に一般的なタスクです。 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 サイトの他の関連記事を参照してください。