go語言寫文件io go語言文件操作

【golang】小技巧-利用io.copy寫數(shù)據(jù)進(jìn)文件

io.copy是按默認(rèn)的緩沖區(qū)32k循環(huán)操作的,不會將內(nèi)容一次性全寫入內(nèi)存中,這樣就能解決大文件的問題。

雙清ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!

Go語言文件操作

本文主要介紹了Go語言中文件讀寫的相關(guān)操作。

文件是什么?

計算機(jī)中的文件是存儲在外部介質(zhì)(通常是磁盤)上的數(shù)據(jù)集合,文件分為文本文件和二進(jìn)制文件。

os.Open() 函數(shù)能夠打開一個文件,返回一個 *File 和一個 err 。對得到的文件實(shí)例調(diào)用 close() 方法能夠關(guān)閉文件。

為了防止文件忘記關(guān)閉,我們通常使用defer注冊文件關(guān)閉語句。

Read方法定義如下:

它接收一個字節(jié)切片,返回讀取的字節(jié)數(shù)和可能的具體錯誤,讀到文件末尾時會返回 0 和 io.EOF 。 舉個例子:

使用for循環(huán)讀取文件中的所有數(shù)據(jù)。

bufio是在file的基礎(chǔ)上封裝了一層API,支持更多的功能。

io/ioutil 包的 ReadFile 方法能夠讀取完整的文件,只需要將文件名作為參數(shù)傳入。

os.OpenFile() 函數(shù)能夠以指定模式打開文件,從而實(shí)現(xiàn)文件寫入相關(guān)功能。

其中:

name :要打開的文件名 flag :打開文件的模式。 模式有以下幾種:

perm :文件權(quán)限,一個八進(jìn)制數(shù)。r(讀)04,w(寫)02,x(執(zhí)行)01。

golang ioutil.WriteFile函數(shù)perm參數(shù)的用法

golang ioutil.WriteFile函數(shù)perm參數(shù)的用法

ioutil.WriteFile(..., perm os.FileMode)

剛開始接觸golang的文件API的時候,總是納悶為什么在創(chuàng)建文件的時候需要顯示的指定文件的perm屬性,難道不能從系統(tǒng)的umask里面獲取嗎?

實(shí)際上ioutil.WriteFile在創(chuàng)建新文件時,并不是直接使用參數(shù)perm的值,而是要和umask的值做合并的。把函數(shù)參數(shù)的值合并到當(dāng)前umask的值,才是最終創(chuàng)建出來文件的perm屬性。

例如

umask為空,所以ioutil.WriteFile的perm屬性就是最后的文件屬性

umask為0777,所以ioutil.WriteFile的perm屬性全被disable掉了

umask為0000,所以ioutil.WriteFile的perm屬性就是最后的文件屬性

umask為0640,而ioutil.WriteFile的perm屬性也是640,正好全部被關(guān)閉了,最后生成的文件沒有任何屬性。

即ioutil.WriteFile在寫文件時,如果目標(biāo)文件已經(jīng)存在,那么目標(biāo)文件的perm屬性不會被改動,即此時ioutil.WriteFile的參數(shù)perm會被忽略。

注意一點(diǎn)就明白了,touch命令使用的是0666的屬性,它并沒有給X(executable)屬性置值,所以不管在umask中對executable位是否置1,touch命令就不能生成一個具有executable的文件。

新聞標(biāo)題:go語言寫文件io go語言文件操作
文章來源:http://muchs.cn/article26/dosjicg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄域名注冊、建站公司、Google、品牌網(wǎng)站設(shè)計、網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)