Go by Example 中文版: 读文件
时间:2022-07-25
本文章向大家介绍Go by Example 中文版: 读文件,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Go by Example 中文版: 读文件:读文件
读写文件在很多程序中都是必须的基本任务。 首先我们来看一些读文件的例子。 相关的Go语言示例程序代码如下:
// Go by Example 中文版: 读文件
// https://gobyexample-cn.github.io/reading-files
// 读写文件在很多程序中都是必须的基本任务。 首先我们来看一些读文件的例子。
package main
import (
"bufio"
"fmt"
"io"
"io/ioutil"
"os"
)
// 读取文件需要经常进行错误检查,这个帮助方法可以精简下面的错误检查过程。
func check(e error) {
if e != nil {
panic(e)
}
}
func main() {
// 最基本的文件读取任务获取就是将文件内容读取到内存中。
dat, err := ioutil.ReadFile("/tmp/dat")
check(err)
fmt.Print(string(dat))
//您通常会希望对文件的读取方式和内容进行更多控制。
//对于这个任务,首先使用 Open 打开一个文件,以获取一个 os.File 值。
f, err := os.Open("/tmp/dat")
//defer f.Close()
check(err)
// 从文件的开始位置读取一些字节。最多允许读取5个字节,但还要注意实际读取了多少个。
b1 := make([]byte, 5)
n1, err := f.Read(b1)
check(err)
fmt.Printf("%d bytes: %sn", n1, string(b1[:n1]))
// 你也可以Seek到一个文件中已经的位置,并从这个位置开始读取。
o2, err := f.Seek(6, 0)
check(err)
b2 := make([]byte, 2)
n2 ,err := f.Read(b2)
check(err)
fmt.Printf("%d bytes @ %d: ", n2, o2)
fmt.Printf("%vn", string(b2[:n2]))
// 例如,io 包提供了一个更健壮的实现 ReadAtLeast,用于读取上面那种文件。
o3, err := f.Seek(6, 0)
check(err)
b3 := make([]byte, 2)
n3, err := io.ReadAtLeast(f, b3, 2)
check(err)
fmt.Printf("%d bytes @ %d: %sn", n3, o3, string(b3))
// 没有内建的倒带,但是Seek(0, 0)实现了这一功能。
_, err = f.Seek(0, 0)
check(err)
// bufio 包实现了一个缓冲读取器,这可能有助于提高许多小读操作的效率,以及它提供了很多附加的读取函数。
r4 := bufio.NewReader(f)
b4, err := r4.Peek(5)
check(err)
fmt.Printf("5 bytes: %sn", string(b4))
// 任务结束后要关闭这个文件 (通常这个操作应该在 Open 操作后立即使用 defer 来完成)。
f.Close()
}
运行结果如下:
$ echo "hello" > /tmp/dat
$ echo "go" >> /tmp/dat
$ go run reading-files.go
hello
go
5 bytes: hello
2 bytes @ 6: go
2 bytes @ 6: go
5 bytes: hello
下面是我在CentOS7下的运行结果截图:
下面我们来看一下写入文件。
- Audit Logging-Stored Procedure
- Linux进程间通信(四) - 共享内存
- 扩展UltraGrid控件实现对所有数据行的全选功能[Source Code下载]
- Linux进程间通信(一) - 管道
- Linux进程间通信(二) - 消息队列
- Linux进程间通信(三) - 信号
- 我的WCF之旅(7):面向服务架构(SOA)和面向对象编程(OOP)的结合——如何实现Service Contract的继承
- Linux进程间通信(IPC)机制总览
- 负载均衡 - 综述
- 浅谈ASP.NET的Postback
- WCF版的PetShop之一:PetShop简介[提供源代码下载]
- 维吉尼亚密码及程序实现
- 迪菲-赫尔曼密钥交换
- 分布式系统组件之配置中心
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- CANet|拼接注意力网络
- SQL 中判断条件的先后顺序,会引起索引失效么?
- 一个超酷的开源uHand2.0机械手掌项目
- 神经网络低比特量化——TQT
- web前端面试题:您能读懂的Promise源码实现(手写代码)
- web前端面试题对答篇:HTTP fetch发送2次请求的原因?
- MySQL 8.0之hash join
- MySQL 8.0 之原子DDL
- 翻译|MySQL 基于ScaleFlux SSD性能测试
- 使用srsLTE搭建4G基站
- 构建高性能队列,你不得不知道的底层知识!
- 案例| +1s导致的故障
- 前端|如何制作音乐播放器
- 密码破解神器Hydra初识
- 基于R语言的lmer混合线性回归模型