使用 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中文网其他相关文章!