一、前言:为什么文件操作这么重要?
朋友们,不知道你们有没有经历过这样的绝望:写了几小时代码,结果程序一崩溃,数据全没了!或者好不容易搞定了业务逻辑,却在简单的文件保存上翻了车...
说实话,我刚开始学Go的时候也这样,总觉得文件操作不就是读读写写嘛,能有多难?结果被现实啪啪打脸——文件权限、缓冲区、并发锁、路径处理,哪个都能让你debug到怀疑人生。
但别怕!今天咱们就用最接地气的方式,把Go语言文件处理那点事儿彻底讲明白。我保证,看完这篇,你不仅能避开我踩过的所有坑,还能写出比很多老手更稳健的IO代码!
二、环境准备:咱们的游乐场
在开始“飙车”之前,得先检查下“装备”:
package main
import (
"fmt"
"os"
)
func main() {
// 看看你的Go版本够不够新
fmt.Println("Go文件操作之旅开始!")
// 创建个临时目录来玩,用完即焚
tmpDir := "test_files"
if err := os.MkdirAll(tmpDir, 0755); err != nil {
panic(fmt.Sprintf("创建目录失败:%v", err))
}
fmt.Printf("工作目录已创建:%s\n", tmpDir)
// 程序结束前清理现场
defer func() {
os.RemoveAll(tmpDir)
fmt.Println("临时文件已清理,深藏功与名~")
}()
}
知识点:defer就像是定了个闹钟——“等函数结束后记得打扫房间”。这样即使程序中途崩溃,清理代码也能执行,避免留下垃圾文件。
三、基础篇:文件操作的“十八般武艺”
3.1 创建文件:从零到一的第一步
创建文件听起来简单,但这里面门道可多了:
func basicFileOperations() {
// 方法1:使用os.Create - 最简单粗暴
file1, err := os.Create("test_files/example1.txt")
if err != nil {
panic(err)
}
fmt.Printf("文件1创建成功:%s\n", file1.Name())
file1.Close() // 用完记得关,不然会内存泄漏!
// 方法2:先检查再创建 - 更稳妥的做法
filename := "test_files/example2.txt"
if _, err := os.Stat(filename); err == nil {
fmt.Println("文件已存在,先删掉旧的")
os.Remove(filename)
}
file2, err := os.Create(filename)
if err != nil {
panic(err)
}
defer file2.Close() // 推荐用defer关闭,避免忘记
fmt.Println("所有文件创建完成!")
}
避坑指南:很多新手会忘记关闭文件,导致文件描述符泄漏。记住Go的黄金法则——有Open就要有Close,用defer最保险!
3.2 写入文件:把你的想法“刻”在磁盘上
现在我们来给文件加点内容:
func writeFileOperations() {
file, err := os.Create("test_files/write_example.txt")
if err != nil {
panic(err)
}
defer file.Close()
// 方法1:直接写字符串
_, err = file.WriteString("你好,这是第一行内容\n")
if err != nil {
panic(err)
}
// 方法2:写字节切片
content := []byte("这是第二行内容,用字节写入\n")
_, err = file.Write(content)
if err != nil {
panic(err
Go文件操作全面解析

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



