专栏首页有趣的django8.Go-Reader,Writer和ioutil

8.Go-Reader,Writer和ioutil

8.1.Reader

(1)输入流

  • 流是应用程序和外部资源进行数据交互的纽带
  • 流分为输入流和输出流,输入和输出都是相对于程序,把外部数据传入程序中叫做输入流,反之叫做输出流
  • 在Go语言标准库中io包下是Reader接口表示输入流,只要实现这个接口就属于输入流

(2)手动创建流

//Learn_Go/main.go
package main

import (
	"fmt"
	"strings"
)

func main() {
	r := strings.NewReader("hello world")
	b := make([]byte,r.Size())
	n,err := r.Read(b)
	if err != nil{
		fmt.Println("读取流数据失败",err)
		return
	}
	fmt.Println("读取的数据长度为:",n)       //读取的数据长度为: 11
	fmt.Println("数据内容为:",string(b))     //数据内容为: hello world
}

(3)读取文件内容

//Learn_Go/main.go
package main

import (
	"fmt"
	"os"
)

func main() {
	f,_ := os.Open("D:/test.txt")
	fileInfo,_ := f.Stat()
	b := make([]byte,fileInfo.Size())
	f.Read(b)
	fmt.Println(string(b))
}

//结果
床前明月光,
疑是地上霜。
举头望明月,
低头思故乡。

8.2.Writer

//Learn_Go/main.go
package main

import "os"

func main() {
	filePath := "D:/go.txt"
	f,err := os.OpenFile(filePath,os.O_APPEND,0660)     // 0660  表示权限
	defer f.Close()
	if err != nil{
		f,_ = os.Create(filePath)    //如果文件不存在,就新建一个文件
	}
	//f.Write([]byte("你好,世界"))
	f.WriteString("床前明月光,\r\n疑是地上霜。\r\n举头望明月,\r\n低头思故乡。")
}

8.3.ioutil  

 ioutil包下提供了对文件读写的工具函数,通过这些函数快速实现文件的读写操作

(1)打开文件后使用ReadAll把文件内容读出来

//Learn_Go/main.go
package main

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

func main() {
	f,err := os.Open("D:/go.txt")
	defer f.Close()
	if err != nil{
		fmt.Println(err)
		return
	}
	b,err := ioutil.ReadAll(f)
	if err != nil{
		fmt.Println(err)
		return
	}
	fmt.Println(string(b))
} 

 (2)可以直接读取文件中内容 

//Learn_Go/main.go
package main

import (
	"fmt"
	"io/ioutil"
)

func main() {
	b,err := ioutil.ReadFile("D:/go.txt")
	if err != nil{
		fmt.Println(err)
		return
	}
	fmt.Println(string(b))
}

(3)写数据

//Learn_Go/main.go
package main

import "io/ioutil"

func main() {
	//每次清空再写,而不是追加
	ioutil.WriteFile("D:/go.txt",[]byte("你好,世界"),0666)
}

(4)读取所有目录

//Learn_Go/main.go
package main

import (
	"fmt"
	"io/ioutil"
)

func main() {
	fi,_ := ioutil.ReadDir("D:/")
	for _,n := range fi{
		fmt.Println(n.Name())     //D盘下所有目录的名字
	}
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Go 数据存储篇(三):通过 CSV 格式读写文本数据

    在上篇教程中,学院君给大家演示了如何通过 JSON 编码存储文本数据到磁盘文件,除此之外,Go 语言还提供了对 CSV 格式文件的支持,CSV 文件本质上虽然就...

    学院君
  • Go语言的IO库那么多,我该怎么选?

    在计算机和信息技术领域里I/O这个术语表示输入 / 输出 ( 英语:Input / Output ) ,通常指数据在存储器(内部和外部)或其他周边设备之间的输入...

    9号同学
  • 从 io.Reader 中读数据

    Go 的标准库提供了多个从 io.Reader 中读取数据的方法 (io、ioutil),本文通过从 net.Conn中读取数据为例,演示各种方法已经应用场景。

    李海彬
  • Golang读写文件的几种方式

    最近在使用Golang进行文件读写的过程中,遇到几个细节问题导致程序写入数据时有一定脏数据的残留,最后发现是使用os.OpenFile在进行文件操作的时候没有使...

    李海彬
  • [译]Go语言常用文件操作汇总

    Go官方提供的文件操作标准库分散在os、ioutil等多个包中,里面有非常多的方法涵盖了文件操作的所有场景,不过因为我平时开发过程中需要直接操作文件的场景其实并...

    KevinYan
  • Golang读写文件操作

    最近在使用Golang进行文件读写的过程中,遇到几个细节问题导致程序写入数据时有一定脏数据的残留,最后发现是使用os.OpenFile在进行文件操作的时候没有使...

    BGBiao
  • go 读写文件方式

    Open() 底层调用的是 OpenFile(name, O_RDONLY, 0)

    solate
  • Go语言入门——进阶语法篇(四)

    Go语言没有类似Java或Python那种try...catch...机制处理异常,Go的哲学是与众不同的,Go的设计者认为主流的异常处理机制是一种被过度滥用的...

    arcticfox
  • (三十六)golang--文件的基本操作

    2.读取文件中的内容,并显示给终端(带缓冲区的方式),使用os.Open(),file.Close(),bufio.NewReader(),reader.Rea...

    西西嘛呦
  • Golang文件操作-上篇

    仙人技术
  • Go语言入门(九) 文件操作

    alexhuiwang
  • Go语言实战笔记(十九)| Go Writer 和 Reader

    Go Writer 和 Reader接口的设计遵循了Unix的输入和输出,一个程序的输出可以是另外一个程序的输入。他们的功能单一并且纯粹,这样就可以非常容易的编...

    飞雪无情
  • Golang语言情怀-第48期 Go 语言标准库翻译 compress/gzip

    这些常量都是拷贝自flate包,因此导入"compress/gzip"后,就不必再导入"compress/flate"了。

    李海彬
  • Go 并发编程之 RWMutex

    友情提示:此篇文章大约需要阅读 8分钟42秒,不足之处请多指教,感谢你的阅读。 订阅本站

    Meng小羽
  • Golang语言情怀-第43期 Go 语言标准库翻译 bufio

    bufio包实现了有缓冲的I/O。它包装一个io.Reader或io.Writer接口对象,创建另一个也实现了该接口,且同时还提供了缓冲和一些文本I/O的帮助函...

    李海彬
  • Golang语言情怀-第42期 Go 语言标准库翻译 archive/zip

    为了向下兼容,FileHeader同时拥有32位和64位的Size字段。64位字段总是包含正确的值,对普通格式的档案未见它们的值是相同的。对zip64格式的档案...

    李海彬
  • glang文件读写

    go文件的相关操作函数在os包下,可以查看os包官方文档来学习。 创建文件并写入内容 创建文件和写入需要用到两个函数: func Create(name st...

    李海彬
  • 剖析Go的读写锁

    package main import ( "fmt" "sync" "time" ) func main() { rw := new(...

    李海彬
  • 【Rust投稿】从零实现消息中间件(6)-CLIENT

    client实现功能相对比较单一,就是能够向服务器pub消息,然后就会说订阅消息,订阅的主题收到消息以后能够得到通知.因此总结起来就是下面三个功能:

    MikeLoveRust

扫码关注云+社区

领取腾讯云代金券