国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Golang > 正文

GO語言文件的創(chuàng)建與打開實例分析

2020-04-01 19:23:29
字體:
供稿:網(wǎng)友
這篇文章主要介紹了GO語言文件的創(chuàng)建與打開的具體用法,實例分析了GO語言文件創(chuàng)建與打開操作中所涉及的函數(shù)具體用法,具有一定的參考借鑒價值,需要的朋友可以參考下
 

本文實例分析了GO語言文件的創(chuàng)建與打開用法。分享給大家供大家參考。具體分析如下:

文件操作是個很重要的話題,使用也非常頻繁,熟悉如何操作文件是必不可少的。Golang 對文件的支持是在 os package 里,具體操作都封裝在 type File struct {} 結(jié)構(gòu)體中。

一、func Open(name string) (file *File, err error)
再簡單不過了,給一個路徑給它,返回文件描述符,如果出現(xiàn)錯誤就會返回一個 *PathError。
這是一個只讀打開模式,實際上就是 os.OpenFile() 的快捷操作,它的原型如下:

復(fù)制代碼代碼如下:
func Open(name string) (file *File, err error) {
    return OpenFile(name, O_RDONLY, 0)
}

二、func OpenFile(name string, flag int, perm FileMode) (file *File, err error)
這個復(fù)雜點,需要提供文件路徑、打開模式、文件權(quán)限。

 

打開標(biāo)記:

O_RDONLY:只讀模式(read-only)
O_WRONLY:只寫模式(write-only)
O_RDWR:讀寫模式(read-write)
O_APPEND:追加模式(append)
O_CREATE:文件不存在就創(chuàng)建(create a new file if none exists.)
O_EXCL:與 O_CREATE 一起用,構(gòu)成一個新建文件的功能,它要求文件必須不存在(used with O_CREATE, file must not exist)
O_SYNC:同步方式打開,即不使用緩存,直接寫入硬盤
O_TRUNC:打開并清空文件
文件權(quán)限(unix權(quán)限位):只有在創(chuàng)建文件時才需要,不需要創(chuàng)建文件可以設(shè)置為 0。os庫雖然提供常量,但是我一般直接寫數(shù)字,如0664。

如果你需要設(shè)置多個打開標(biāo)記和unix權(quán)限位,需要使用位操作符"|",示例代碼如下:

復(fù)制代碼代碼如下:
f, err := os.OpenFile("test.txt", os.O_CREATE|os.O_APPEND|os.O_RDWR, os.ModePerm|os.ModeTemporary)
   if err != nil {
 panic(err)
}

如果文件存在就以讀寫模式打開,并追加寫入;如果文件不存在就創(chuàng)建,然后以讀寫模式打開。

 

三、func Create(name string) (file *File, err error)
實際上這也是 os.OpenFile() 的快捷操作。創(chuàng)建一個新文件并以讀寫方式打開,權(quán)限位"0666",如果文件存在則會清空。原型如下:

復(fù)制代碼代碼如下:
func Create(name string) (file *File, err error) {
    return OpenFile(name, O_RDWR|O_CREATE|O_TRUNC, 0666)
}

四、任何文件的打開操作,請記得及時釋放
復(fù)制代碼代碼如下:
func ReadFile(pth string) error{
 f, err := os.Open(pth)
    if err!=nil{
        return err
    }
 defer f.Close() //釋放資源,時刻不忘
    ...
}

os 模塊中還有一個 func NewFile(fd uintptr, name string) *File 函數(shù),使用給出的Unix文件描述符和名稱創(chuàng)建一個文件。參考:
復(fù)制代碼代碼如下:
Stdin = NewFile(uintptr(syscall.Stdin), "/dev/stdin")
Stdout = NewFile(uintptr(syscall.Stdout), "/dev/stdout")
Stderr = NewFile(uintptr(syscall.Stderr), "/dev/stderr")

 

希望本文所述對大家的GO語言程序設(shè)計有所幫助。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 稻城县| 闻喜县| 吉木乃县| 冕宁县| 保山市| 吉木萨尔县| 叶城县| 沙河市| 确山县| 仪陇县| 芦溪县| 汝南县| 长顺县| 长兴县| 宜城市| 梨树县| 砀山县| 竹溪县| 高雄县| 延长县| 花垣县| 云南省| 清丰县| 巴林左旗| 栾城县| 常熟市| 濮阳市| 桂东县| 互助| 桂阳县| 犍为县| 四子王旗| 平阴县| 玉山县| 石泉县| 扶沟县| 闵行区| 钦州市| 星座| 呼玛县| 深水埗区|