Golang是一門非常強大的程式語言,它提供了許多內建類型和函數,幫助程式設計師快速編寫高效的程式碼。其中,結構體類型是非常常用的一種。在處理網路通訊、資料儲存和傳輸等方面,我們通常需要將結構體類型資料編碼成二進位資料或序列化成JSON格式的字串進行傳輸。本文將介紹一些Golang函數的結構體類型的編碼和解碼技巧。
在Golang中,結構體類型的定義需要使用type關鍵字和struct關鍵字。例如,下面定義了一個Person結構體類型,包含了Name和Age兩個欄位:
type Person struct { Name string Age int }
p := Person{"Tina", 28} jsonData, _ := json.Marshal(p) fmt.Println(string(jsonData)) // {"Name":"Tina","Age":28}
jsonStr := `{"Name":"Tina", "Age": 28}` var p Person _ = json.Unmarshal([]byte(jsonStr), &p) fmt.Println(p) // {Tina 28}
buf := new(bytes.Buffer) binary.Write(buf, binary.LittleEndian, &p) byteData := buf.Bytes() fmt.Printf("%x ", byteData) // 54696e61001c0000我們使用了bytes.Buffer和binary.Write()函數將結構體類型p序列化成了字節序列byteData。 binary.Write()函數的第二個參數指明了字節序處理的方式,這裡用的是LittleEndian格式。 同樣,我們也可以使用binary.Read()函數以相同形式反序列化byteData,例如:
var q Person err := binary.Read(bytes.NewReader(byteData), binary.LittleEndian, &q) if err != nil { fmt.Println(err) } fmt.Println(q) // {Tina 28}
var byteData bytes.Buffer enc := gob.NewEncoder(&byteData) err := enc.Encode(&p) if err != nil { fmt.Println(err) } fmt.Printf("%x ", byteData.Bytes()) // 026864073544696e61001c我們使用了bytes.Buffer和gob.NewEncoder()函數將結構體類型p編碼成了一個位元組序列byteData。
dec := gob.NewDecoder(&byteData) var q Person err := dec.Decode(&q) if err != nil { fmt.Println(err) } fmt.Println(q) // {Tina 28}總結結構體類型是Golang類型中常用的一種資料類型,在處理網路通訊和當資料儲存和傳輸時,我們經常需要將結構體類型編碼成二進位資料或序列化成字串進行傳輸。本文介紹了一些Golang函數的結構體類型的編碼和解碼技巧,包括JSON編碼和解碼、位元組序列編碼和解碼和Gob編碼和解碼。這些技巧能夠幫助我們快速、有效率地完成資料傳輸和儲存任務。
以上是Golang函數的結構體類型的編碼和解碼技巧的詳細內容。更多資訊請關注PHP中文網其他相關文章!