无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Go語言文件操作、json序列化、單元測試

2022-10-24 22:01 作者:苦茶今天斷更了嗎  | 我要投稿

Go語言文件操作、json序列化、單元測試

os.File封裝所有文件相關(guān)操作File是一個(gè)結(jié)構(gòu)體。

打開文件:func Open(name string)(file *File, err error)

關(guān)閉文件:func (f*File) Close() error

讀取文件

①讀取的內(nèi)容并顯示在終端(帶緩沖區(qū)),使用os.Open,file.Close,bufio.NewReader(), reader.ReadString函數(shù)和方法。

②讀取文件的內(nèi)容并顯示在終端(使用ioutil.ReadFile一次將整個(gè)文件讀入到內(nèi)存中),這種方式適用于文件不大的情況。文件的open和close被封裝到ReadFile函數(shù)內(nèi)部。

?寫文件:

func OpenFil(name string, flag int, perm FileMode (file *File, err error)

flag int:文件打開模式(可組合);perm FileMode:權(quán)限控制:r→4;w→2;x→1。

?

實(shí)例1:①創(chuàng)建一個(gè)新文件。

②將原來的內(nèi)容覆蓋成新的內(nèi)容10句"你好,尚硅谷!"。

③打開一個(gè)存在的文件,在原來的內(nèi)容追加內(nèi)容 'ABC! ENGLISH!'

④打開一個(gè)存在的文件,將原來的內(nèi)容讀出顯示在終端,寫入內(nèi)容5句"hello,尚硅谷"。

?

實(shí)例2:編程一個(gè)程序,將一個(gè)文件的內(nèi)容,寫入到另外一個(gè)文件。注:文件已存在。

說明:使用ioutil.ReadFile / ioutil. WriteFile完成寫文件的任務(wù)。


?

判斷文件是否存在:

使用os.Stat()函數(shù)返回的錯(cuò)誤值進(jìn)行判斷:

如果返回的錯(cuò)誤為nil:說明文件或文件夾存在。

如果返回的錯(cuò)誤類型使用os.lsNotExist()判斷為true,說明文件或文件夾不存在。

如果返回的錯(cuò)誤為其它類型,則不確定是否在存在。


統(tǒng)計(jì)英語、數(shù)字、空格、其他字符的數(shù)量

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

?

命令行參數(shù):os.Amgs,是一個(gè)string的切片,用來存儲(chǔ)所有的命令行參數(shù)。

go設(shè)計(jì)者給我們提供了flag包,可以方便的解析命令行參數(shù),而且參數(shù)順序可以隨意。

?

?

JSON(JavaScript Object Notation)是一種輕量級(jí)的數(shù)據(jù)交換格式。key-val

JSON易于機(jī)器解析和生成,并有效地提升網(wǎng)絡(luò)傳輸效率,通常程序在網(wǎng)絡(luò)傳輸時(shí)會(huì)先將數(shù)據(jù)(結(jié)構(gòu)體、map等)序列化成json字符串,到接收方得到j(luò)son字符串時(shí)在反序列化恢復(fù)成原來的數(shù)據(jù)類型(結(jié)構(gòu)體、map等)。這種方式已然成為各個(gè)語言的標(biāo)準(zhǔn)。

Golang →(序列化)→ json字符串 →(網(wǎng)絡(luò)傳輸)→ 程序 →(反序列化)→ 其他語言

在JS語言中,一切都是對(duì)象。因此,任何的數(shù)據(jù)類型都可以通過JSON來表示。

JSON鍵值對(duì)是用來保存數(shù)據(jù)一種方式,鍵/值對(duì)組合中的鍵名寫在前面并用雙引號(hào)""包裹,使用冒號(hào):分隔,然后緊接著值。

json數(shù)據(jù)在線解析:https://www.json.cn/

對(duì)于結(jié)構(gòu)體的序列化,如果我們希望序列化后的key的名字,又我們自己重新制定,那么可以給struct指定一個(gè)tag標(biāo)簽。

序列化后:{ "monster_name":"牛魔王","monster_age":500,"Birthday":"2011-11-11".

"Sal":8000,"Skill :"牛魔拳"}

?

Json的反序列化

①確保反序列化后的數(shù)據(jù)類型和原來序列化前的數(shù)據(jù)類型一致。

②如果json字符串是通過程序獲取到的,則不需要再對(duì)“轉(zhuǎn)義處理。


?單元測試

Go語言中自帶有一個(gè)輕量級(jí)的測試框架testing和自帶的go test命令來實(shí)現(xiàn)單元測試和性能測試,testing框架和其他語言中的測試框架類似,可以基于這個(gè)框架寫針對(duì)相應(yīng)函數(shù)的測試用例,也可以基于該框架寫相應(yīng)的壓力測試用例。

①測試用例文件名必須以_test.go 結(jié)尾。比如cal_test.go,cal不是固定的。

②測試用例函數(shù)必須以Test開頭,一般來說就是Test+被測試的函數(shù)名。

③TestAddUpper(t *tesing.T) 的形參類型必須是*testing.T。

④一個(gè)測試用例文件中,可以有多個(gè)測試用例函數(shù)。

⑤運(yùn)行測試用例指令

cmd>go test[如果運(yùn)行正確,無日志,錯(cuò)誤時(shí),會(huì)輸出日志]

? cmd>go test-v[運(yùn)行正確或是錯(cuò)誤,都輸出日志]

⑥當(dāng)出現(xiàn)錯(cuò)誤時(shí),可以使用t.Fatalf來格式化輸出錯(cuò)誤信息,并退出程序。

⑦t.Logf方法可以輸出相應(yīng)的日志。

測試用例函數(shù),并沒有放在 main函數(shù)中,也執(zhí)行了,這就是測試用例的方便之處。

⑨PASS表示測試用例運(yùn)行成功,F(xiàn)AL表示測試用例運(yùn)行失敗。

⑩測試單個(gè)文件,一定要帶上被測試的原文件:go test -v cal_test.go??cal.go

①測試單個(gè)方法:go test -v -test.run TestAddUpper

?

案例:

①編寫一個(gè)Monster結(jié)構(gòu)體,字段Name, Age, Skill

②給Monster綁定方法Store,可以將一個(gè)Monster變量(對(duì)象),序列化后保存到文件中。

③給Monster綁定方法ReStore,可以將一個(gè)序列化的Monster,從文件中讀取,并反序列化為Monster對(duì)象,檢查反序列化,名字正確。

④編程測試用例文件store_test.go,編寫測試用例函數(shù)TestStore和TestRestore進(jìn)行測試。

monster.go:

monster_test.go:


?

?


Go語言文件操作、json序列化、單元測試的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
顺昌县| 西充县| 资中县| 七台河市| 珠海市| 海兴县| 娄底市| 桂林市| 富民县| 泾阳县| 长顺县| 枝江市| 铜鼓县| 依安县| 运城市| 疏勒县| 泾川县| 清远市| 云霄县| 尚志市| 裕民县| 溆浦县| 错那县| 九江市| 新巴尔虎左旗| 三门峡市| 肇源县| 吴堡县| 东明县| 清河县| 施秉县| 新乡县| 井陉县| 平顶山市| 稻城县| 南和县| 浠水县| 乳源| 龙岩市| 即墨市| 万山特区|