跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Go / Golang

Go 语言文件读写入门:os、bufio 与 ioutil 实战

Go 语言处理文件输入输出主要依赖 os、bufio 和 ioutil 等标准库。通过实际代码示例,演示了如何使用 os.OpenFile 创建并写入文件,以及利用 ioutil.ReadAll 读取内容。同时指出了 ioutil 包的废弃状态及现代替代方案,帮助开发者快速掌握基础文件操作技巧,避免常见权限设置错误。

abccba发布于 2018/4/9更新于 2026/7/2937 浏览
Go 语言文件读写入门:os、bufio 与 ioutil 实战

Go 语言文件读写入门:os、bufio 与 ioutil 实战

在 Go 开发初期,文件操作是绕不开的基础环节。虽然标准库功能强大,但面对 os、bufio 和 ioutil 这几个包时,新手往往容易混淆它们的适用场景。今天我们就通过一段实战代码,把这几者的用法理清楚。

核心代码实现

下面是一个完整的示例,展示了如何打开文件、写入数据,然后读取回来。注意这里修正了原代码中权限设置的误区。

package main

import (
	"fmt"
	"io/ioutil"
	"os"
)

func main() {
	// 1. 打开或创建文件
	// 使用 os.O_RDWR|os.O_APPEND|os.O_CREATE 组合标志
	// 权限设置为 0644,而不是 os.ModeType(那是文件类型位)
	file, err := os.OpenFile("test.txt", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644)
	if err != nil {
		panic(err)
	}
	defer file.Close()

	// 2. 写入数据
	data := []byte("Hello Go File I/O\n第二行测试\n")
	_, err = file.Write(data)
	if err != nil {
		panic(err)
	}

	// 3. 读取数据
	// 因为刚才写入了数据,指针在末尾,需要重置到开头才能读到内容
	_, err = file.Seek(0, 0)
	if err != nil {
		panic(err)
	}

	content, err := ioutil.ReadAll(file)
	if err != nil {
		panic(err)
	}
	fmt.Printf("%s", string(content))
}

关键点解析

关于权限设置

很多初学者会误用 os.ModeType 作为权限参数,这在 OpenFile 中是无效的。正确的做法是使用八进制数字如 0644,或者预定义的常量 os.ModePerm。

关于 ioutil 的变迁

代码中使用了 ioutil.ReadAll。如果你使用的是 Go 1.16 及以上版本,应该知道 ioutil 包已经标记为废弃。现在官方推荐直接使用 os.ReadFile 或 io.ReadAll。但在维护旧项目时,你依然会频繁见到它。

缓冲区的优势

虽然示例中直接用了 ReadAll,但如果处理大文件,建议结合 bufio.Reader。它可以按行读取,减少内存占用。比如 br.ReadString('\n') 就能逐行处理日志文件,而不用一次性加载整个文件到内存。

总结

文件操作看似简单,细节却不少。理解文件指针的位置、权限掩码的含义,以及不同 IO 包的演进,能帮你写出更稳健的代码。多动手尝试,这些 API 很快就会变成你的肌肉记忆。

目录

  1. Go 语言文件读写入门:os、bufio 与 ioutil 实战
  2. 核心代码实现
  3. 关键点解析
  4. 关于权限设置
  5. 关于 ioutil 的变迁
  6. 缓冲区的优势
  7. 总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • GitHub Copilot 安装配置与高效使用指南
  • WhisperLiveKit 实时语音识别指南:从安装到生产部署
  • Seedance 2.0 字节跳动 AI 视频生成模型介绍
  • GitHub Copilot 安装与使用详解
  • Ubuntu/Debian 系统下 libwebkit2gtk-4.1-0 的 APT 安装实战
  • Git 国内镜像源下载与安装指南
  • 使用 Python Tkinter 开发简易视频解析播放工具
  • GitHub Actions 工作流自动化创建 Release 实践
  • Mac 系统安装与配置 Claude Code 命令行工具
  • 宇树 G1 机器人开发入门:有线与无线连接配置
  • AI 终端生态重构与视觉感知驱动的实体交互实践
  • 基于MISRA C++的车载软件开发实战案例
  • Freqtrade 新手教程:macOS + Docker 环境配置与回测
  • 网络安全学习常用工具软件推荐与解析
  • Arduino 基于 6.5 寸轮毂电机的自动跟随机器人底盘超声波方案
  • Ubuntu 安装实录(二):实体机部署与常见问题排查
  • Audio Pixel Studio 语音合成学术应用:论文朗读与文献摘要
  • AI 大模型收费指标 Token 详解
  • Trae IDE 核心机制拆解:AI Agent 中 Skill 的定义与功能实现
  • Spring Boot 中使用 Jasypt 加密敏感信息

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online