Go リフレクションを使用したシリアル化と逆シリアル化: シリアル化: エンコーディング/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
関数を使用します。この関数には、最初の引数として構造体へのポインタが必要で、2 番目の引数としてシリアル化されたデータを含むバイトのスライスが必要です。
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 中国語 Web サイトの他の関連記事を参照してください。