직렬화 및 역직렬화를 위해 Go 리플렉션 사용: 직렬화: 인코딩/json.Marshal 함수를 사용하여 구조를 바이트 스트림으로 직렬화합니다. 역직렬화: 인코딩/json.Unmarshal 함수를 사용하여 바이트 스트림에서 구조를 역직렬화합니다.
Reflection은 실행 중인 프로그램을 검사하고 수정할 수 있는 Go의 강력한 기능입니다. 직렬화, 역직렬화 등 다양한 목적으로 사용될 수 있으며 데이터 구조를 바이트 스트림으로 저장한 다음 나중에 다시 생성할 수 있습니다.
리플렉션을 사용하여 구조를 직렬화하려면 encoding/json
패키지의 Marshal
함수를 사용하세요. 이 함수는 첫 번째 인수로 구조에 대한 포인터가 필요하며 직렬화된 바이트 조각을 반환합니다. 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) }Deserialization직렬화된 데이터를 역직렬화하려면
encoding/json
패키지의 Unmarshal
함수를 사용하세요. 이 함수에는 첫 번째 인수로 구조체에 대한 포인터가 필요하고 두 번째 인수로 직렬화된 데이터를 포함하는 바이트 조각이 필요합니다. 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) }실제 사례🎜🎜다음은 리플렉션을 사용한 직렬화 및 역직렬화의 실제 예입니다. 🎜rrreee
위 내용은 golang에서 직렬화 및 역직렬화를 위해 리플렉션을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!