26 Go語言標準庫之檔案操作

2021-10-11 16:13:42 字數 4115 閱讀 3376

os.open()函式能夠開啟乙個檔案,返回乙個*file和乙個err。對得到的檔案例項呼叫close()方法能夠關閉檔案。

package main

import

("fmt"

"os"

)func

main()

// 關閉檔案

file.

close()

}

為了防止檔案忘記關閉,我們通常使用defer註冊檔案關閉語句。

read方法定義如下:

func

(f *file)

read

(b [

]byte

)(n int

, err error

)

它接收乙個位元組切片,返回讀取的位元組數和可能的具體錯誤,讀到檔案末尾時會返回0io.eof。 例如:

func

main()

defer file.

close()

// 使用read方法讀取資料

var tmp =

make([

]byte

,128

) n, err := file.

read

(tmp)

if err == io.eof

if err !=

nil fmt.

printf

("讀取了%d位元組資料\n"

, n)

fmt.

println

(string

(tmp[

:n])

)}

使用for迴圈讀取檔案中的所有資料。

func

main()

defer file.

close()

// 迴圈讀取檔案

var content [

]byte

var tmp =

make([

]byte

,128

)for

if err !=

nil content =

(content, tmp[

:n]...)}

fmt.

println

(string

(content)

)}

bufio是在file的基礎上封裝了一層api,支援更多的功能。

package main

import

("bufio"

"fmt"

"io"

"os"

)// bufio按行讀取示例

func

main()

defer file.

close()

reader := bufio.

newreader

(file)

for fmt.

println

("檔案讀完了"

)break

}if err !=

nil fmt.

print

(line)

}}

io/iouti包的readfile方法能夠讀取完整的檔案,只需要將檔名作為引數傳入。

package main

import

("fmt"

"io/ioutil"

)// ioutil.readfile讀取整個檔案

func

main()

fmt.

println

(string

(content)

)}

os.openfile()函式能夠以指定模式開啟檔案,從而實現檔案寫入相關功能。

func

openfile

(name string

, flag int

, perm filemode)

(*file,

error

)

其中:

name:要開啟的檔名flag:開啟檔案的模式。 模式有以下幾種:

模式含義

os.o_wronly

只寫os.o_create

建立檔案

os.o_rdonly

唯讀os.o_rdwr

讀寫os.o_trunc

清空追加

perm:檔案許可權,乙個八進位制數。r(讀)04,w(寫)02,x(執行)01。

func

main()

defer file.

close()

str :=

"hello 掛榜山"

file.

write([

]byte

(str)

)//寫入位元組切片資料

file.

writestring

("hello 小六"

)//直接寫入字串資料

}

func

main()

defer file.

close()

writer := bufio.

newwriter

(file)

for i :=

0; i <

10; i++

writer.

flush()

//將快取中的內容寫入檔案

}

func

main()

}

借助io.copy()實現乙個拷貝檔案函式。

// copyfile 拷貝檔案函式

func

copyfile

(dstname, srcname string

)(written int64

, err error

)defer src.

close()

// 以寫|建立的方式開啟目標檔案

dst, err := os.

openfile

(dstname, os.o_wronly|os.o_create,

0644

)if err !=

nildefer dst.

close()

return io.

copy

(dst, src)

//呼叫io.copy()拷貝內容

}func

main()

fmt.

println

("copy done!"

)}

使用檔案操作相關知識,模擬實現linux平台cat命令的功能。

package main

import

("bufio"

"flag"

"fmt"

"io"

"os"

)// cat命令實現

func

cat(r *bufio.reader)

fmt.

fprintf

(os.stdout,

"%s"

, buf)}}

func

main()

// 依次讀取每個指定檔案的內容並列印到終端

for i :=

0; i < flag.

narg()

; i++

cat(bufio.

newreader

(f))

}}

返回主目錄

說明:文章參考於李文周老師筆記(看詳細內容請檢視源筆記)

2 6 Go語言整型(整數型別)

go語言的數值型別分為以下幾種 整數 浮點數 複數,其中每一種都包含了不同大小的數值型別,例如有符號整數包含 int8 int16 int32 int64 等,每種數值型別都決定了對應的大小範圍和是否支援正負符號。本節我們主要介紹一下整數型別。go語言同時提供了有符號和無符號的整數型別,其中包括 i...

Go語言標準庫之flag

go語言內建的flag包實現了命令列引數的解析,flag包使得開發命令列工具更為簡單。如果你只是簡單的想要獲取命令列引數,可以像下面的 示例一樣使用os.args來獲取命令列引數。package main import fmt os os.args demo func main 將上面的 執行go ...

Go語言標準庫之strconv

go語言中strconv包實現了基本資料型別和其字串表示的相互轉換。更多函式請檢視官方文件。這一組函式是我們平時程式設計中用的最多的。將字串型別的整數轉換為int型別。func atoi s string i int,err error 如果傳入的字串引數無法轉換為int型別,就會返回錯誤。s1 1...