`

GO语言学习笔记02

 
阅读更多
go序列化与反序列化
// 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()
}
分享到:
评论

相关推荐

    Go语言学习笔记.pdf 共174页

    Go语言学习笔记.pdf 共174页是一本关于Go语言的详细学习笔记,涵盖了Go语言的基础知识、函数、数组、Maps、Structs、接口、并发、程序结构、标准库等方面的内容。本笔记共分为三大部分:Go语言基础、标准库和扩展库...

    Go语言学习笔记.pdf

    综上所述,Go语言学习笔记通常涵盖了语言的起源、设计哲学、语法特点、环境配置、核心功能使用等多方面知识。通过理解这些知识点,开发者能够有效地掌握Go语言,为开发高性能的应用程序打下坚实的基础。随着对Go语言...

    go语言学习笔记

    go语言学习经典数据,雨痕,go语言学习笔记 第四版 pdf版本

    Go语言学习笔记

    Go语言学习笔记是关于Go语言基础入门篇的笔记,主要介绍Go语言基础语法、数据类型、逻辑语句等相关知识点。 语言概述 Go语言是一种开源的编程语言,能让构造简单、可靠且高效的软件变得容易。Go语言是从2007年末由...

    Go 学习笔记——雨痕

    Go语言,又称Golang,是一种静态类型的编程语言,由Google开发,于2007年首次对外公布,并在2009年进行了...通过本学习笔记的内容,我们可以对Go语言有一个全面而系统的认识,为深入学习和应用Go语言打下坚实的基础。

    Go 学习笔记 第四版 pdf

    根据提供的信息,我们可以总结出这份文档是关于Go语言学习笔记的部分内容,主要涵盖了Go语言的基础概念、语法结构、数据类型以及并发模型等关键知识点。以下是对这些知识点的详细解析: ### Go语言概述 Go(也称作...

    go语言学习笔记.zip

    在"Go语言学习笔记.zip"这个压缩包中,包含了两份学习资料——一个Excel文件和一个PDF文件,这为学习Go语言提供了丰富的资源。Excel文件可能包含了清晰的学习路径规划,比如不同阶段的学习目标、关键概念、语法要点...

    Go语言学习笔记.mobi

    Go语言学习笔记.mobi,适合kindle上面阅读,学习GO语言值得推荐的一本书

    Go 学习笔记 高清

    Go语言学习笔记中提及的内容涵盖了Go语言的基础知识和高级特性。下面将根据笔记目录的内容详细解释每个部分的知识点。 第一部分:Go语言基础 - 第1章 基础:介绍Go语言的基本概念,包括变量、基本类型、类型转换、...

    Go学习笔记-第四版-雨痕

    《Go学习笔记-第四版》是由知名编程作者雨痕编写的关于Go语言的教程,旨在帮助读者深入理解和掌握Go语言的各个方面。Go语言,又称Golang,是Google于2009年推出的一种静态类型的、编译型的、并发型且具有垃圾回收...

    基于Go语言的学习笔记(附代码)

    本学习笔记主要涵盖了Go语言的基础知识,包括类型、表达式、函数、数据结构、方法、接口、并发以及包管理等多个方面,并附带了源码分析和附录中的工具、调试和测试等内容。 一、类型 1. 变量:Go语言中的变量需要...

    韩顺平_Go语言核心编程完整版笔记.zip

    《韩顺平Go语言核心编程完整版笔记》是一份全面且深入的学习资料,旨在帮助学习者掌握Go语言的核心概念和编程技巧。这份笔记基于韩顺平老师的Go语言视频教程,内容丰富,覆盖了Go语言的各个方面,对于想要系统学习Go...

    Go语言学习笔记-雨痕(扫描)

    雨痕大大亲自编写,Go学习入门,Go深入学习,都适合你,扫描版

    雨痕golang学习笔记第四版 加上书签版

    《雨痕golang学习笔记第四版 加上书签版》是针对Go语言学习者的参考资料,作者雨痕在书中详细记录了从2012年开始学习Go语言至今的经验与成果。本书内容全面,涵盖了Go语言的基础知识、数据结构、函数特性、并发编程...

Global site tag (gtag.js) - Google Analytics