热门IT资讯网

struct对象的序列化和反序列化

发表于:2024-11-30 作者:热门IT资讯网编辑
编辑最后更新 2024年11月30日,package mainimport ( "encoding/xml" "fmt")type person struct { Name string Age int}func
package mainimport (    "encoding/xml"    "fmt")type person struct {    Name string    Age int}func main() {    p := person{Name: "张三", Age: 18}    //无缩进生成xml    if data, err := xml.Marshal(p); err != nil {        fmt.Println(err)        return    }else{ //注意,else也在if data, err := xml.Marshal(p); err != nil作用域内,放在外面会找不到data        fmt.Println(string(data))        fmt.Println()    }    //有缩进生成xml(第二个参数:在每行的开头加的前缀。第三个参数:缩进)    if data, err := xml.MarshalIndent(p, "", "  "); err != nil {        fmt.Println(err)        return    }else{ //注意,else也在if data, err := xml.Marshal(p); err != nil作用域内,放在外面会找不到data        fmt.Println(string(data))        fmt.Println()    }    //全局输出(不用包含在if-else里)    var data []byte    var err error    if data, err = xml.MarshalIndent(p, "#", "  "); err != nil {        fmt.Println(err)        return    }    fmt.Println(string(data))    fmt.Println()    //反序列化    p2 := new(person)    if err = xml.Unmarshal(data, p2);err != nil {        fmt.Println(err)        return    }    fmt.Println(p2)    fmt.Println()    //加上属性    type new_person struct {        Name string `xml:"name,attr"`        Age int    }    new_p := new_person{Name: "lucy", Age: 18}    if data, err := xml.Marshal(new_p); err != nil {        fmt.Println(err)        return    }else{ //注意,else也在if data, err := xml.Marshal(p); err != nil作用域内,放在外面会找不到data        fmt.Println(string(data))        fmt.Println()    }}

输出:

0