### 文件讀取
> func (f *File) Read(b []byte) (n int, err error)
> Read(b []byte)
> b []byte 文件字節組成的切片
>
Read方法從文件中讀取最多len(b)字節數據并寫人byte數組b,它返回讀取的字節數和可能遇到的任何錯誤。文件終止標志是讀取0個字節且返回值err為io.EOF。
```
package main
import (
"fmt"
"os"
)
func mode(path string) {
//讀取文件內容
file, err := os.Open(path)
if err != nil {
fmt.Println(err)
}
// 創建 byte 的slice(切片)用于接收文件讀取數據
buf := make([]byte, 1024)
// 循環讀取
for {
// Read函數會改變文件當前偏移量
len, _ := file.Read(buf)
// 讀取字節為0時,跳出循環
if len == 0 {
break
}
fmt.Println(string(buf))
}
// 關閉文件
file.Close()
}
// 讀取999.txt 文件內容
func main() {
// 路徑
mode("E:\\flie\\999.txt")
}
```
當文件較大時使用ReadAt接口
> func (f *File) ReadAt(b []byte, off int64) (n int, err error)
> ReadAt(b []byte, off int64)
> b []byte 文件字節組成的切片
> off int64 偏移字節
ReadAt從指定的位置(相對于文件開始位置)讀取len(b)字節數據并寫入byte數組b。它返回讀取的字節數和可能遇到的任何錯誤。當n<len(b)時,本方法總是會返回錯誤;如果是因為到達文件結尾,返回值err會是io.EOF。
```
package main
import (
"fmt"
"os"
)
func mode(path string) {
//讀取文件內容
file, err := os.Open(path)
if err != nil {
fmt.Println(err)
}
// 創建 byte 的slice(切片)用于接收文件讀取數據
buf := make([]byte, 1024)
// ReadAt函數會改變文件當前偏移量
// ReadAt讀取偏移9字節的內容
_, _ = file.ReadAt(buf, 9)
// file.ReadAt(buf, 9)
fmt.Println(string(buf))
// 關閉文件
_ = file.Close()
// file.Close()
}
// 讀取999.txt 文件內容
func main() {
// 路徑
mode("E:\\flie\\999.txt")
}
```
- 安裝開發環境
- 安裝開發環境
- 安裝詳細教程
- 引入包
- Go語言基礎
- 基本變量與數據類型
- 變量
- 數據類型
- 指針
- 字符串
- 代碼總結
- 常量與運算符
- 常量
- 運算符
- 流程控制
- if判斷
- for循環
- switch分支
- goto跳轉
- 斐波那契數列
- Go語言內置容器
- 數組
- 切片
- 映射
- 函數
- 函數(上)
- 函數(中)
- 函數(下)
- 小節
- 包管理
- 結構體
- 結構體(上)
- 結構體(中)
- 結構體(下)
- 小節
- 錯誤處理
- 錯誤處理
- 宕機
- 錯誤應用
- 小節
- 文件操作
- 獲取目錄
- 創建和刪除目錄
- 文件基本操作(上)
- 文件基本操作(中)
- 文件基本操作(下)
- 處理JSON文件
- 接口與類型
- 接口的創建與實現
- 接口賦值
- 接口嵌入
- 空接口
- 類型斷言(1)
- 類型斷言(2)
- 小節
- 并發與通道
- goroutine協程
- runtime包
- 通道channel
- 單向通道channel
- select
- 線程同步
- 多線程的深入學習
- http編程
- http簡介
- Client和Request
- get請求
- post請求
- 模塊函數方法
- 模塊
- fmt庫,模塊
- 項目練習
- 爬蟲:高三網
- 爬蟲:快代理
- 爬蟲:快代理2
- 多線程:通道思路
- 多線程爬蟲:快代理