bufio

  • bufio包实现了带缓冲区的读写,是对文件读写的封装
  • bufio缓冲写数据
模式 含义
os.O_WRONLY 只写
os.O_CREATE 创建文件
os.O_RDONLY 只读
os.O_RDWR 读写
os.O_TRUNC 清空
os.O_APPEND 追加
  • bufio读、写数据
func main() {
//wr()
re()
}
func re() {
// 读文件用os.Open
file, err := os.Open("./t01.txt")
if err != nil {
fmt.Println(err.Error())
return
}
defer file.Close()
// 获取reader对象
reader := bufio.NewReader(file)
for {
line, _, err := reader.ReadLine()
if err == io.EOF {
break
}
if err != nil {
fmt.Println(err.Error())
return
}
fmt.Println(string(line))
}
}
func wr() {
// 写文件用os.OpenFile
file, err := os.OpenFile("t01.txt", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
if err != nil {
fmt.Println(err.Error())
return
}
defer file.Close()
// 获取Writer对象
writer := bufio.NewWriter(file)
for i := 0; i < 10; i++ {
writer.WriteString(fmt.Sprintf("hello %d\n", i))
}
// 刷新缓冲区,强制写出
writer.Flush()
}

ioutil工具包

  • 工具包写文件
  • 工具包读取文件
func main() {
//wr()
re()
}
func wr() {
if err := ioutil.WriteFile("./t02.txt", []byte("哈哈哈哈\n"), 0644); err != nil {
fmt.Println(err.Error())
return
}
}
func re() {
data, err := ioutil.ReadFile("./t02.txt")
if err != nil {
fmt.Println(err.Error())
return
}
fmt.Println(string(data))
}

例子:实现一个Cat命令

使用文件操作相关知识,模拟实现linux平台cat命令的功能。

func main() {
flag.Parse() // 解析命令行参数
if flag.NArg() == 0 {
// 如果没有参数,默认从标准输入读取内容
reader := bufio.NewReader(os.Stdin)
cat(reader)
}
// 依次读取每个指定文件的内容,并打印到终端
for i := 0; i < flag.NArg(); i++ {
file, err := os.Open(flag.Arg(i))
if err != nil {
fmt.Fprintf(os.Stdout, "reading from %s failed, err: %v \n", flag.Arg(i), err)
continue
}
cat(bufio.NewReader(file))
}
} // cat 命令实现
func cat (r *bufio.Reader) {
for {
buf, err := r.ReadBytes('\n') // 注意是字符
if err == io.EOF {
break
}
fmt.Fprintf(os.Stdout, "%s", buf)
}
}

golang中bufio和ioutil的使用的更多相关文章

  1. Go_18: Golang 中三种读取文件发放性能对比

    Golang 中读取文件大概有三种方法,分别为: 1. 通过原生态 io 包中的 read 方法进行读取 2. 通过 io/ioutil 包提供的 read 方法进行读取 3. 通过 bufio 包提 ...

  2. Golang 中三种读取文件发放性能对比

    Golang 中读取文件大概有三种方法,分别为: 1. 通过原生态 io 包中的 read 方法进行读取 2. 通过 io/ioutil 包提供的 read 方法进行读取 3. 通过 bufio 包提 ...

  3. golang中Context的使用场景

    golang中Context的使用场景 context在Go1.7之后就进入标准库中了.它主要的用处如果用一句话来说,是在于控制goroutine的生命周期.当一个计算任务被goroutine承接了之 ...

  4. Golang中的自动伸缩和自防御设计

    Raygun服务由许多活动组件构成,每个组件用于特定的任务.其中一个模块是用Golang编写的,负责对iOS崩溃报告进行处理.简而言之,它接受本机iOS崩溃报告,查找相关的dSYM文件,并生成开发者可 ...

  5. golang中发送http请求的几种常见情况

    整理一下golang中各种http的发送方式 方式一 使用http.Newrequest 先生成http.client -> 再生成 http.request -> 之后提交请求:clie ...

  6. Golang中GBK和UTF8编码格式互转

    Golang中GBK和UTF8编码格式互转 需求 已知byte数组的编码格式转换 实现代码 package utils import ( "bytes" "golang. ...

  7. Golang中常用的代码优化点

    Golang中常用的代码优化点 大家好,我是轩脉刃. 这篇想和大家聊一聊golang的常用代码写法.在golang中,如果大家不断在一线写代码,一定多多少少会有一些些代码的套路和经验.这些经验是代表你 ...

  8. 优雅处理Golang中的异常

    我们在使用Golang时,不可避免会遇到异常情况的处理,与Java.Python等语言不同的是,Go中并没有try...catch...这样的语句块,我们知道在Java中使用try...catch.. ...

  9. golang中的race检测

    golang中的race检测 由于golang中的go是非常方便的,加上函数又非常容易隐藏go. 所以很多时候,当我们写出一个程序的时候,我们并不知道这个程序在并发情况下会不会出现什么问题. 所以在本 ...

随机推荐

  1. 【LeetCode】788. Rotated Digits 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  2. Saving Beans(hud3037)

    Saving Beans Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  3. 『学了就忘』vim编辑器基础 — 95、命令模式中的相关命令

    目录 1.移动光标操作 2.删除或剪切操作 3.复制操作 4.撤销操作 5.替换操作 6.补充一个知识点 命令模式中的命令主要取代的是Linux系统中鼠标的操作. vim编辑器的快捷键一般都集中在命令 ...

  4. 第四十三个知识点:为AES描述一些基础的(可能无效)的对抗侧信道攻击的防御

    第四十三个知识点:为AES描述一些基础的(可能无效)的对抗侧信道攻击的防御 原文地址:http://bristolcrypto.blogspot.com/2015/07/52-things-numbe ...

  5. 山寨F407板子如何烧录正点原子例程、Keil下载提示Invalid ROM Table

    山寨F407板子如何烧录正点原子例程 手头这块块信赢达的STM32F407板子,是模仿正点原子探索者STM32F407板子的,外设和接口,几乎是一模一样. 探索者板子用的是STM32F407ZET6, ...

  6. Chapter 8 Selection Bias

    目录 8.1 The structure of selection bias 8.2 Examples of selection bias 8.3 Selection bias and confoun ...

  7. 替代台湾安格AG6200 AG6201 HDMI转VGA带音频方案+设计电路 CS5213代替AG6200 AG6201

    台湾安格AG6200 AG6201专门用于设计HDMI转VGA带音频输出的方案芯片,CS5213是一款HDMI to VGA转换器且结合了HDMI输入接口和模拟RGB DAC输出.带支持片上音频数模转 ...

  8. <数据结构>XDOJ327.最短路径

    问题与解答 问题描述 求图中任意两个顶点之间的最短路径. 输入格式 输入数据第一行是一个正整数,表示图中的顶点个数n(顶点将分别按0,1,-,n-1进行编号).之后的n行每行都包含n个整数,第i行第j ...

  9. javaScript系列 [09]-javaScript和JSON (拓展)

    本文输出JSON搜索和JSON转换相关的内容,是对前两篇文章的补充. JSON搜索 在特定的开发场景中,如果服务器端返回的JSON数据异常复杂(可能超过上万行),那么必然就有对JSON文档进行搜索的需 ...

  10. JSP的数据从数据库中获取导入type=date的input标签中

    jsp 页面最开始加上 <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> & ...