// main project main.go package main import ( "encoding/binary" "encoding/gob" "fmt" "os" ) //定义结构Student对象 type Student struct { Name string Age int Adress string } //gob序列化 (序列化就是将对象的状态信息转换为可以存储或传输的形式的过程) //go语言标准库除了提供了gob的之外,还提供了json,binary以及base32,base64的序列化 //Gob 是 Go 中所特有的序列化技术,它支持除 interface,function,channel 外的所有 Go 数据类型。 //序列化使用 Encoder,反序列化使用 Decoder。我们可以把一个结构体序列化到文件中。然后再反序列化。 func gobFunc() { stu := &Student{"张珊", 23, "重庆"} //创建Student对象 //创建一个dat文件 f, err = os.Create("E:\\stu.dat") if err != nil { //如果err不为nil则表示出现异常或错误 fmt.Println(err.Error()) //打印异常或者错误信息 return //如果出现异常或者错误结束啊方法,就不向下继续执行 } //deferf f.Close() //deferf 类似java中的finally 最终都会执行的 //创建Encoder encode := gob.NewEncoder(f) encode.Encode(stu) //把stu对象序列化到f文件中(E:\\stu.dat) //重置指针到文件开始 f.Seek(0, os.SEEK_SET) //反序列化 decod := gob.NewDecoder(f) var stu1 Student decod.Decode(&stu1) fmt.Println(stu1) } //go语言序列化对象为二进制 func binaryFunc() { stu := &Student{"张珊", 23, "重庆"} //创建Student对象 buf := new(bytes.Buffer) err := binary.Write(buf, binary.LittleEndian, stu) if err != nil { fmt.Println(err.Error()) return } fmt.Printf("% x\n", buf.Bytes()) } func main() { //gobFunc() binaryFunc() }
go与xml和json
// main project main.go package main import ( "encoding/json" "encoding/xml" "fmt" "os" ) type Student struct { Name string Age int } //把对象序列化为xml,和反序列化 func parseToxml() { //将创建的student对象序列化到xml f, err := os.Create("data.dat") if err != nil { fmt.Println(err.Error()) return } defer f.Close() s := &Student{"zbb", 20} //创建student对象 //创建encode对象 encoder := xml.NewEncoder(f) //将s序列化到文件中 encoder.Encode(s) //重置指针到初始位置 f.Seek(0, os.SEEK_SET) //***编译并且运行后用编辑器打开data.bat文件其内容如下 <Student><Name>zbb</Name><Age>20</Age></Student> //反xml序列化 decoder := xml.NewDecoder(f) var stu1 Student decoder.Decode(&stu1) fmt.Println(stu1) //输出 {zbb 20} } //xml的Marshal函数可以直接把对象序列化为字符串 func xmlMarshal() { s := &Student{"赵云", 26} result, err := xml.Marshal(s) if err != nil { fmt.Println(err.Error()) return } fmt.Println(result) fmt.Println(string(result)) //输出 <Student><Name>赵云</Name><Age>26</Age></Student> } //UnMarshal 可以将一个 xml 反序列化为对像 func xmlUnMarshal() { str := "<Student><Name>赵云</Name><Age>26</Age></Student>" var s Student xml.Unmarshal([]byte(str), &s) fmt.Println(s) //输出 {赵云 26} } //json序列化与反序列化 func jsonMarshalAndUnmarshal() { s := &Student{"赵子龙", 26} buf, err := json.Marshal(s) if err != nil { fmt.Println(err.Error()) return } fmt.Println(string(buf)) //输出 {"Name":"赵子龙","Age":26} //反序列化 var stu1 Student json.Unmarshal(buf, &stu1) fmt.Println(stu1) //输出 {赵子龙 26} } func main() { //parseToxml() //xmlMarshal() //xmlUnMarshal() jsonMarshalAndUnmarshal() }