首頁 > 後端開發 > Golang > 主體

golang結構轉成byte

WBOY
發布: 2023-05-10 22:54:36
原創
1607 人瀏覽過

在程式設計中,資料的序列化和反序列化是非常常見的任務。在Golang中,我們可以使用標準庫中的「encoding/binary」套件將資料結構轉換為位元組序列,這在資料傳輸和儲存方面特別有用。本文將介紹如何使用Golang將結構轉換為位元組序列。

一、Golang中的結構體

在Golang中,結構體是一種使用者自訂的資料結構,它允許我們將不同的資料類型組合在一起,以形成一個更為複雜的資料型態。定義結構體的語法如下:

type 结构体名 struct {
  字段名1 数据类型1
  字段名2 数据类型2
  ……
}
登入後複製

例如,我們可以定義一個Person結構體來表示一個人的信息:

type Person struct {
  Name string
  Age int
  Height float64
}
登入後複製

二、Golang中的位元組序列
在Golang中,可以使用位元組切片來表示位元組序列,它可以將一個資料結構序列化為一個位元組序列,以便傳輸或儲存在檔案中。例如,我們可以使用以下語句來建立一個空字節切片:

b := make([]byte, 0)
登入後複製

三、將結構體轉換為字節序列

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」轉換為位元組序列的結果。這裡的使用了二進位模式,並採用了小端模式(即低位元組儲存在起始位置)。

我們可以看到,生成的位元組序列中包含結構體的欄位名稱和類型訊息,這是因為在反序列化時需要知道這些資訊才能正確地還原資料結構。

四、將位元組序列轉換為結構體

為了將位元組序列反序列化為結構體,我們可以使用「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結構轉成byte的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板