計算機中的檔案是儲存在外部介質(通常是磁碟)上的資料集合,檔案分為文字檔案和二進位制檔案。
os.open()函式能夠開啟乙個檔案,返回乙個*file和乙個err。對得到的檔案例項呼叫close()方法能夠關閉檔案。
package main
import
("fmt"
"os"
)func main(
) // 關閉檔案
file.close(
)}
為了防止檔案忘記關閉,我們通常使用defer註冊檔案關閉語句。
file.read(
)
基本使用
read方法定義如下:
func (f *file) read(b [
]byte)
(n int, err error)
它接收乙個位元組切片,返回讀取的位元組數和可能的具體錯誤,讀到檔案末尾時會返回0和io.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)
forif err != nil
...)
} 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/ioutil包的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 小王子"
) //直接寫入字串資料
}bufio.newwriter
func main(
) defer file.close(
) writer := bufio.newwriter(file)
for i := 0; i < 10; i++
writer.flush(
) //將快取中的內容寫入檔案
}ioutil.writefile
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 != nil
defer 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))
}}
呼叫示例:
go build main.go
./main …/test.txt
其中test.txt檔案中需要存在換行符『\n』
1 3Go語言環境
為了便於 學習與分享,建議各位大佬可以前往 github 免費註冊乙個賬戶,在此有很多優秀的go專案,可以較快的提高自己的開發能力。成功註冊github賬戶後,可以象下面這樣建立用於儲存 源 的資料夾 github賬戶名 macos或linux mkdir gopath src github.com...
13 go語言 開始專案實戰
1 爬蟲專案介紹 網路爬蟲分類 通用爬蟲,如baidu,google 聚焦爬蟲,從網際網路獲取結構化資料 go語言的爬蟲庫 框架 henrylee2cn pholcus gocrawl colly hu17889 go spider 將不使用現成的爬蟲庫 框架 使用elasticsearch作為資料...
13Go語言基礎之介面
本文是李文周的部落格go語言學習之路的目錄提要版,方便複習檢視使用,原文參見文章連線 介面 inte ce 定義了乙個物件的行為規範,只定義規範不實現,由具體的物件來實現規範的細節。在go語言中介面 inte ce 是一種型別,一種抽象的型別。inte ce是一組method的集合,是duck ty...