亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

40 Go 語言的文件操作

本文主要介紹 Go 語言中對文件系統的操作,Go 語言內置庫中提供了豐富的文件操作函數,所以本文主要介紹使用Go 語言中的內置包——“os” 來實現文件操作。

1. 文件創建/打開

若你想創建/打開一個文件,則可以使用

func OpenFile(name string, flag int, perm uint32) (file *File, err Error)  

參數解釋:

  • name:就是文件名,若文件不在執行程序目錄下,則可以使用文件的相對路徑或者絕對路徑。

  • flag:是文件打開模式,其支持模式共有(O_RDONLY|O_WRONLY|O_RDWR三個中必須要選一個):

    • O_RDONLY:以只讀方式打開文件;
    • O_WRONLY:以只寫方式打開文件;
    • O_RDWR:以讀寫方式打開文件;
    • O_APPEND:寫入時將數據追加到文件;
    • O_CREATE:如果不存在新文件,則創建一個新文件;
    • O_EXCL:與O_CREATE一起使用,文件不能存在;
    • O_SYNC:為同步I/O打開;
    • O_TRUNC:打開時截斷常規可寫文件;
  • perm:文件權限,一般最高為0777。

代碼示例

package main

import (
    "fmt"
    "os"
)

func main() {
    f, err := os.OpenFile("a.txt", os.O_RDWR|os.O_CREATE, 0777)
    if err != nil {
        panic(err)
    }
    fmt.Println(f.Name())
}
  • 第 9 行:以讀寫的方式打開一個名為a.txt的文件,若文件不存在則創建這個文件,文件權限為0777;
  • 第 13 行:打印這個文件名;

執行結果:

圖片描述

2. 文件讀取

文件打開之后,就可以從得到的文件對象中讀取文件內容。我們在 a.txt 文件中輸入 file test 字符串,來驗證讀取結果。

代碼示例:

package main

import (
    "fmt"
    "os"
)

func main() {
    f, err := os.OpenFile("a.txt", os.O_RDWR|os.O_CREATE, 0777)
    if err != nil {
        panic(err)
    }
    b := make([]byte, 10) //最大讀取字符數量
    i, err := f.Read(b)
    if err != nil {
        panic(err)
    }
    fmt.Println(i)         //輸出讀取的字符串的個數
    fmt.Println(string(b)) //輸出讀取到的字符串
}

執行結果:

圖片描述

3. 文件寫入

文件寫入有兩種模式,追加模式和覆寫模式。如果在打開文件的時候加上了 O_APPEND 模式,就是追加,如果不加就是覆寫。

代碼示例:

package main

import (
    "os"
)

func main() {
    f1, err := os.OpenFile("a.txt", os.O_RDWR|os.O_CREATE, 0777)
    if err != nil {
        panic(err)
    }
    f1.WriteString("覆寫字符")
    f1.Close()

    f2, err := os.OpenFile("b.txt", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0777)//追加模式打開文件
    if err != nil {
        panic(err)
    }
    f2.WriteString("追加字符")
}

反復執行幾遍上述代碼,然后打開兩個文件,文件內容如下:

覆寫的文件中只有"覆寫字符"這四個字,因為其寫入被不斷覆寫了。

圖片描述

追加的文件中有很多"追加字符",因為其寫入是不斷的被追加到文件末尾的。

圖片描述

4. 小結

本文主要介紹了 Go 語言中自帶的 os 包的文件操作,需要注意的是文件的打開中若不確定文件是否存在,就可以加上 O_CREATE。改寫文件若是需要追加到文件末尾,記得在打開文件的時候要加上 O_APPEND。