使用 Go 反射進行序列化和反序列化:序列化:使用 encoding/json.Marshal 函數將結構序列化為位元組流。反序列化:使用 encoding/json.Unmarshal 函數從位元組流中反序列化結構。
#反射是 Go 中強大的功能,可讓您檢查和修改正在執行的程式。它可用於多種用途,包括序列化和反序列化,它使您可以將資料結構保存為位元組流,然後在以後重新建立它們。
要使用反射序列化結構,請使用 encoding/json
套件中的 Marshal
函數。此函數需要指向結構的指標作為其第一個參數,並傳回序列化後的位元組切片。
package main import ( "encoding/json" "fmt" "io/ioutil" "os" ) type person struct { FirstName string LastName string Age int } func main() { p := person{FirstName: "John", LastName: "Doe", Age: 30} b, err := json.Marshal(&p) if err != nil { panic(err) } // 保存序列化后的数据到文件 err = ioutil.WriteFile("person.json", b, 0644) if err != nil { panic(err) } }
要反序列化已序列化的數據,請使用 encoding/json
套件中的 Unmarshal
函數。此函數需要指向結構的指標作為其第一個參數,以及包含序列化資料的位元組切片作為其第二個參數。
func main() { var p person b, err := ioutil.ReadFile("person.json") if err != nil { panic(err) } // 反序列化数据到结构 err = json.Unmarshal(b, &p) if err != nil { panic(err) } // 打印反序列化的数据 fmt.Printf("%+v\n", p) }
以下是使用反射進行序列化和反序列化的實際範例:
type user struct { ID int Name string } var users = []user{ {1, "john"}, {2, "jane"}, } var b []byte func main() { // 序列化用户数组 b, _ = json.Marshal(users) // 将序列化后的数据保存到文件中 ioutil.WriteFile("users.json", b, 0644) // 反序列化文件中的数据 var loadedUsers []user json.Unmarshal(b, &loadedUsers) // 打印反序列化的用户 fmt.Println(loadedUsers) }
以上是golang 如何使用反射進行序列化和反序列化的詳細內容。更多資訊請關注PHP中文網其他相關文章!