Go 中序列化与反序列化
以 JSON 格式为例,对 Go 的 struct 进行序列化与反序列化 import ( "encoding/json" "fmt" ) type Person struct { Name string Age int } func main() { // struct to json person := Person{ Name: "Tom", Age: 10, } marshaled, err := json.Marshal(person) if err != nil { fmt.Printf("Error marsaling %s\n", err) return } s := string(marshaled) fmt.Printf("Type: %T, Value:%+v\n", s, s) } // json to struct person = Person{} if err = json.Unmarshal([]byte(strJSON), &person); err != nil { fmt.Printf("Error unmarsaling %s\n", err) return } fmt.Printf("Type: %T, Value:%+v\n", person, person) } 也可以对 map 类型进行序列化与反序列化 func mapToJson(m map[string]interface{}) ([]byte, error) { marshaled, err := json.Marshal(m) if err != nil { fmt.Println("json encode failed, err:", err) } return marshaled, nil } func jsonToMap(b []byte) (map[string]interface{}, error) { var m map[string]interface{} err := json.Unmarshal(b, &m) if err != nil { fmt.Println("json decode failed, err:", err) return nil, err } return m, nil } 但是 encoding/json 对于 map[string]interface 中的数字类型(整型、浮点型等)都序列化成 float64 类型。 ...