清華尹成帶你實戰GO案例(27)Go 讀取檔案
Go 讀取檔案
讀寫檔案是很多程式的基本任務,下面我們看看Go裡面的檔案讀取。
在執行程式之前,你需要建立一個 /tmp/dat 檔案,然後寫入一些測試資料。
執行結果
hello world
i am jemy
who are you
what do you like
5 bytes: hello
2 bytes @ 6: wo
2 bytes @ 6: wo
讀寫檔案是很多程式的基本任務,下面我們看看Go裡面的檔案讀取。
package main
import (
"bufio"
"fmt"
"io"
"io/ioutil"
"os"
)
// 讀取檔案的函式呼叫大多數都需要檢查錯誤,
// 使用下面這個錯誤檢查方法可以方便一點
func check(e error) {
if e != nil {
panic(e)
}
}
func main() {
// 最基本的檔案讀寫任務就是把整個檔案的內容讀取到記憶體
// 最基本的檔案讀寫任務就是把整個檔案的內容讀取到記憶體
dat, err := ioutil.ReadFile("/tmp/dat")
check(err)
fmt.Print(string(dat))
// 有的時候你想更多地控制到底是讀取檔案的哪個部分,這個
// 時候你可以使用`os.Open`開啟一個檔案獲取一個`os.File`
// 物件
f, err := os.Open("/tmp/dat")
// 從這個檔案中讀取一些位元組,並且由於位元組陣列長度所限,
// 最多讀取5個位元組,另外還需要注意實際能夠讀取的位元組
// 數量
b1 := make([]byte, 5)
n1, err := f.Read(b1)
check(err)
fmt.Printf("%d bytes: %s\n", n1, string(b1))
// 你也可以使用`Seek`來跳轉到檔案中的一個已知位置,並從
// 那個位置開始讀取資料
o2, err := f.Seek(6, 0)
check(err)
b2 := make([]byte, 2)
n2, err := f.Read(b2)
check(err)
fmt.Printf("%d bytes @ %d: %s\n", n2, o2, string(b2))
// `io`包提供了一些幫助檔案讀取的函式。例如上面的方法如果
// 使用方法`ReadAtLeast`函式來實現,將使得程式更健壯
o3, err := f.Seek(6, 0)
check(err)
b3 := make([]byte, 2)
n3, err := io.ReadAtLeast(f, b3, 2)
check(err)
fmt.Printf("%d bytes @ %d: %s\n", n3, o3, string(b3))
// 沒有內建的rewind方法,但是可以使用`Seek(0,0)`來實現
_, err = f.Seek(0, 0)
check(err)
// `bufio`包提供了緩衝讀取檔案的方法,這將使得檔案讀取更加
// 高效
r4 := bufio.NewReader(f)
b4, err := r4.Peek(5)
check(err)
fmt.Printf("5 bytes: %s\n", string(b4))
// 最後關閉開啟的檔案。一般來講這個方法會在開啟檔案的時候,
// 使用defer來延遲關閉
f.Close()
}
在執行程式之前,你需要建立一個 /tmp/dat 檔案,然後寫入一些測試資料。
執行結果
hello world
i am jemy
who are you
what do you like
5 bytes: hello
2 bytes @ 6: wo
2 bytes @ 6: wo
5 bytes: hello
網址:http://www.qukuailianxueyuan.io/
欲領取造幣技術與全套虛擬機器資料
區塊鏈技術交流QQ群:756146052 備註:CSDN
尹成學院微信:備註:CSDN
網址:http://www.qukuailianxueyuan.io/
欲領取造幣技術與全套虛擬機器資料
區塊鏈技術交流QQ群:756146052 備註:CSDN
尹成學院微信:備註:CSDN
相關文章
- 清華尹成帶你實戰GO案例(60)Go 寫入檔案Go
- 清華尹成帶你實戰GO案例(22)Go常量Go
- 清華尹成帶你實戰GO案例(28)Go 方法Go
- 清華尹成帶你實戰GO案例(35)Go 互斥Go
- 清華尹成帶你實戰GO案例(38)Go 介面Go
- 清華尹成帶你實戰GO案例(46)Go 排序Go排序
- 清華尹成帶你實戰GO案例(47)Go 切片Go
- 清華尹成帶你實戰GO案例(2) Go 字典Go
- 清華尹成帶你實戰GO案例(7)Go DeferGo
- 清華尹成帶你實戰GO案例(7)Go ExitGo
- 清華尹成帶你實戰GO案例(12)Go PanicGo
- 清華尹成帶你實戰GO案例(19)Go變數Go變數
- 清華尹成帶你實戰GO案例(23)Go 超時Go
- 清華尹成帶你實戰GO案例(29)Go 工作池Go
- 清華尹成帶你實戰GO案例(37)Go 集合功能Go
- 清華尹成帶你實戰GO案例(49)Go 時間Go
- 清華尹成帶你實戰GO案例(52)Go數值Go
- 清華尹成帶你實戰GO案例(54)Go 陣列Go陣列
- 清華尹成帶你實戰GO案例(57)Go通道方向Go
- 清華尹成帶你實戰GO案例(63)Go 指標Go指標
- 清華尹成帶你實戰GO案例(8)Go for迴圈Go
- 清華尹成帶你實戰GO案例(17) Go URL解析Go
- 清華尹成帶你實戰GO案例(20)Go 遍歷通道Go
- 清華尹成帶你實戰GO案例(25)Go 打點器Go
- 清華尹成帶你實戰GO案例(30)Go 關閉通道Go
- 清華尹成帶你實戰GO案例(39)Go 結構體Go結構體
- 清華尹成帶你實戰GO案例(40)Go 程式觸發Go
- 清華尹成帶你實戰GO案例(41)Go 程式執行Go
- 清華尹成帶你實戰GO案例(50)Go 時間戳Go時間戳
- 清華尹成帶你實戰GO案例(53)Go 數字解析Go
- 清華尹成帶你實戰GO案例(55)Go 隨機數Go隨機
- 清華尹成帶你實戰GO案例(58)Go通道緩衝Go
- 清華尹成帶你實戰GO案例(5)Go 自定義排序Go排序
- 清華尹成帶你實戰GO案例(10)Go JSON支援GoJSON
- 清華尹成帶你實戰GO案例(11)Go Line FiltersGoFilter
- 清華尹成帶你實戰GO案例(13)Go range函式Go函式
- 清華尹成帶你實戰GO案例(16)Go Switch語句Go
- 清華尹成帶你實戰GO案例(21)Go 並行通道ChannelGo並行