go語言文件操作最佳實踐:使用 os.open/os.openfile 打開文件并自動關閉(defer file.close());使用 ioutil.readall 讀取整個文件或 bufio.newreader 緩沖讀取大文件;使用 os.create/os.openfile 以寫模式打開文件,使用 ioutil.writefile 一次寫入內容或 file.write 逐步寫入;使用 os.openfile 以附加模式追加到文件,使用 file.seek 定位到末尾并使用 file.write 追加內容;使用 os.stat 檢查文件是否存在(如果不存在,返回 os.errnotexist);使用 os.remove 刪除文件(如果不存在,返回 os.errnotexist)。
Go語言文件操作最佳實踐
在Go中進行文件操作是一個常見的任務,了解最佳實踐至關重要,可以提高效率和編寫健壯的代碼。
打開文件
使用 os.Open 或 os.OpenFile 函數打開文件,指定讀寫模式。
使用 defer file.Close() 自動關閉文件,即使出現錯誤。
file, err := os.Open("filename.txt")
if err != nil {
// 處理錯誤
}
defer file.Close()
登錄后復制
讀取文件
使用 ioutil.ReadAll 讀取整個文件內容到字節切片。使用 bufio.NewReader 創建緩沖讀取器,以便高效讀取大文件。
data, err := ioutil.ReadAll(file)
if err != nil {
// 處理錯誤
}
登錄后復制
寫入文件
使用 os.Create 或 os.OpenFile 以寫模式打開文件。使用 ioutil.WriteFile 一次寫入整個內容到文件。使用 file.Write 逐步寫入內容。
newFile, err := os.Create("newfilename.txt")
if err != nil {
// 處理錯誤
}
defer newFile.Close()
_, err = newFile.Write([]byte("文件內容"))
if err != nil {
// 處理錯誤
}
登錄后復制
追加到文件
使用 os.OpenFile 以附加模式打開文件。使用 file.Seek(0, 2) 定位到文件末尾。使用 file.Write 追加內容。
file, err := os.OpenFile("filename.txt", os.O_APPEND|os.O_WRONLY, 0666)
if err != nil {
// 處理錯誤
}
defer file.Close()
_, err = file.Seek(0, 2)
if err != nil {
// 處理錯誤
}
_, err = file.Write([]byte("追加內容"))
if err != nil {
// 處理錯誤
}
登錄后復制
檢查文件是否存在
使用 os.Stat 檢查文件是否存在,如果文件不存在,則返回 os.ErrNotExist 錯誤。
if _, err := os.Stat("filename.txt"); os.IsNotExist(err) {
// 文件不存在
}
登錄后復制
刪除文件
使用 os.Remove 刪除文件,如果文件不存在,則返回 os.ErrNotExist 錯誤。
err := os.Remove("filename.txt")
if err != nil {
// 處理錯誤
}
登錄后復制
實戰案例
假設我們需要將文件中的數據從一個位置移動到另一個位置:
package main
import (
"fmt"
"io/ioutil"
"log"
"os"
)
func main() {
// 打開源文件
srcFile, err := os.Open("source.txt")
if err != nil {
log.Fatal(err)
}
defer srcFile.Close()
// 讀取源文件的內容
srcData, err := ioutil.ReadAll(srcFile)
if err != nil {
log.Fatal(err)
}
// 關閉源文件
srcFile.Close()
// 打開目標文件
dstFile, err := os.Create("destination.txt")
if err != nil {
log.Fatal(err)
}
defer dstFile.Close()
// 寫入目標文件
if _, err = dstFile.Write(srcData); err != nil {
log.Fatal(err)
}
// 關閉目標文件
dstFile.Close()
fmt.Println("文件已移動成功")
}
登錄后復制






