Go语言文件操作、json序列化、单元测试
Go语言文件操作、json序列化、单元测试
os.File封装所有文件相关操作,File是一个结构体。
打开文件:func Open(name string)(file *File, err error)
关闭文件:func (f*File) Close() error
读取文件:
①读取的内容并显示在终端(带缓冲区),使用os.Open,file.Close,bufio.NewReader(), reader.ReadString函数和方法。

②读取文件的内容并显示在终端(使用ioutil.ReadFile一次将整个文件读入到内存中),这种方式适用于文件不大的情况。文件的open和close被封装到ReadFile函数内部。

写文件:
func OpenFil(name string, flag int, perm FileMode (file *File, err error)
flag int:文件打开模式(可组合);perm FileMode:权限控制:r→4;w→2;x→1。
实例1:①创建一个新文件。

②将原来的内容覆盖成新的内容10句"你好,尚硅谷!"。

③打开一个存在的文件,在原来的内容追加内容 'ABC! ENGLISH!'

④打开一个存在的文件,将原来的内容读出显示在终端,写入内容5句"hello,尚硅谷"。

实例2:编程一个程序,将一个文件的内容,写入到另外一个文件。注:文件已存在。
说明:使用ioutil.ReadFile / ioutil. WriteFile完成写文件的任务。

判断文件是否存在:
使用os.Stat()函数返回的错误值进行判断:
如果返回的错误为nil:说明文件或文件夹存在。
如果返回的错误类型使用os.lsNotExist()判断为true,说明文件或文件夹不存在。
如果返回的错误为其它类型,则不确定是否在存在。
统计英语、数字、空格、其他字符的数量


拷贝文件:func Copy(dst Writer, src Reader)(written int64, err error) 【io包】

命令行参数:os.Amgs,是一个string的切片,用来存储所有的命令行参数。

go设计者给我们提供了flag包,可以方便的解析命令行参数,而且参数顺序可以随意。

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。key-val
JSON易于机器解析和生成,并有效地提升网络传输效率,通常程序在网络传输时会先将数据(结构体、map等)序列化成json字符串,到接收方得到json字符串时,在反序列化恢复成原来的数据类型(结构体、map等)。这种方式已然成为各个语言的标准。
Golang →(序列化)→ json字符串 →(网络传输)→ 程序 →(反序列化)→ 其他语言
在JS语言中,一切都是对象。因此,任何的数据类型都可以通过JSON来表示。
JSON键值对是用来保存数据一种方式,键/值对组合中的键名写在前面并用双引号""包裹,使用冒号:分隔,然后紧接着值。
json数据在线解析:https://www.json.cn/




对于结构体的序列化,如果我们希望序列化后的key的名字,又我们自己重新制定,那么可以给struct指定一个tag标签。
序列化后:{ "monster_name":"牛魔王","monster_age":500,"Birthday":"2011-11-11".
"Sal":8000,"Skill :"牛魔拳"}
Json的反序列化
①确保反序列化后的数据类型和原来序列化前的数据类型一致。
②如果json字符串是通过程序获取到的,则不需要再对“转义处理。



单元测试
Go语言中自带有一个轻量级的测试框架testing和自带的go test命令来实现单元测试和性能测试,testing框架和其他语言中的测试框架类似,可以基于这个框架写针对相应函数的测试用例,也可以基于该框架写相应的压力测试用例。
①测试用例文件名必须以_test.go 结尾。比如cal_test.go,cal不是固定的。
②测试用例函数必须以Test开头,一般来说就是Test+被测试的函数名。
③TestAddUpper(t *tesing.T) 的形参类型必须是*testing.T。
④一个测试用例文件中,可以有多个测试用例函数。
⑤运行测试用例指令
cmd>go test[如果运行正确,无日志,错误时,会输出日志]
cmd>go test-v[运行正确或是错误,都输出日志]
⑥当出现错误时,可以使用t.Fatalf来格式化输出错误信息,并退出程序。
⑦t.Logf方法可以输出相应的日志。
⑧测试用例函数,并没有放在 main函数中,也执行了,这就是测试用例的方便之处。
⑨PASS表示测试用例运行成功,FAL表示测试用例运行失败。
⑩测试单个文件,一定要带上被测试的原文件:go test -v cal_test.go cal.go
①测试单个方法:go test -v -test.run TestAddUpper
案例:
①编写一个Monster结构体,字段Name, Age, Skill
②给Monster绑定方法Store,可以将一个Monster变量(对象),序列化后保存到文件中。
③给Monster绑定方法ReStore,可以将一个序列化的Monster,从文件中读取,并反序列化为Monster对象,检查反序列化,名字正确。
④编程测试用例文件store_test.go,编写测试用例函数TestStore和TestRestore进行测试。
monster.go:


monster_test.go:

