国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

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

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

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

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

os.File封裝所有文件相關(guān)操作,File是一個結(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一次將整個文件讀入到內(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。

?

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

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

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

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

?

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

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


?

判斷文件是否存在:

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

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

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

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


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

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

?

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

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

?

?

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

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

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

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

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

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

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

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

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

?

Json的反序列化

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

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


?單元測試

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

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

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

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

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

⑤運行測試用例指令

cmd>go test[如果運行正確,無日志,錯誤時,會輸出日志]

? cmd>go test-v[運行正確或是錯誤,都輸出日志]

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

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

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

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

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

①測試單個方法:go test -v -test.run TestAddUpper

?

案例:

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

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

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

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

monster.go:

monster_test.go:


?

?


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

分享到微博請遵守國家法律
江油市| 湾仔区| 娄烦县| 六枝特区| 白河县| 海宁市| 元阳县| 松阳县| 秦安县| 绥棱县| 长治市| 灌云县| 崇州市| 囊谦县| 西城区| 普兰店市| 武平县| 福建省| 青川县| 温宿县| 汽车| 台安县| 鹤岗市| 政和县| 濮阳市| 天峻县| 古交市| 磐石市| 仪征市| 虎林市| 随州市| 米泉市| 武定县| 旬邑县| 九寨沟县| 汉沽区| 庆城县| 南江县| 济宁市| 连云港市| 化德县|