在 Go 语言中,读写文件是常见的操作。以下是几种常用的方法:
1. 读取文件
(1) 使用 ioutil.ReadFile(简单,适合小文件)
package main
import (
"fmt"
"io/ioutil"
)
func main() {
data, err := ioutil.ReadFile("test.txt")
if err != nil {
fmt.Println("读取文件失败:", err)
return
}
fmt.Println(string(data))
}
注意:ioutil.ReadFile 会一次性读取整个文件到内存,不适合大文件。
(2) 使用 os.Open + bufio.Scanner(逐行读取,适合大文件)
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
file, err := os.Open("test.txt")
if err != nil {
fmt.Println("打开文件失败:", err)
return
}
defer file.Close()
scanner := bufio.NewScanner(file)
for scanner.Scan() { // 逐行扫描
fmt.Println(scanner.Text()) // 获取当前行内容
}
if err := scanner.Err(); err != nil {
fmt.Println("读取错误:", err)
}
}
2. 写入文件
(1) 使用 ioutil.WriteFile(覆盖写入)
package main
import (
"io/ioutil"
)
func main() {
content := []byte("Hello, Golang!")
err := ioutil.WriteFile("output.txt", content, 0644) // 0644是文件权限(rw-r--r--)
if err != nil {
panic(err)
}
}
(2) 使用 os.OpenFile(追加或自定义模式)
package main
import (
"os"
)
func main() {
file, err := os.OpenFile("output.txt", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
panic(err)
}
defer file.Close()
_, err = file.WriteString("追加内容\n")
if err != nil {
panic(err)
}
}
模式说明:
os.O_APPEND:追加内容。os.O_CREATE:如果文件不存在则创建。os.O_WRONLY:只写模式。
3. 其他常见操作
(1) 检查文件是否存在
if _, err := os.Stat("file.txt"); os.IsNotExist(err) {
fmt.Println("文件不存在")
}
(2) 复制文件
package main
import (
"io"
"os"
)
func CopyFile(src, dst string) error {
source, err := os.Open(src)
if err != nil {
return err
}
defer source.Close()
destination, err := os.Create(dst)
if err != nil {
return err
}
defer destination.Close()
_,err = io.Copy(destination, source)
returnerr
}
funcmain(){
err:=CopyFile( "source.txt", "dest.txt")
iferr!=nil{
panic(err )
}
}
总结
| 场景 | 推荐方法 |
|---|---|
| 快速读取小文件 | ioutil.ReadFile |
| 逐行读取大文件 | bufio.Scanner |
| 覆盖写入 | ioutil.WriteFile |
| 追加写入或复杂操作 | os.OpenFile + Write相关方法 |
如果有更具体的需求(如并发读写、处理二进制文件等),可以进一步探讨!
内容由零声教学AI助手提供,问题来源于学员提问




