go语言之IO操作(待补充)
2023-06-13 09:12:23 时间
前言
在Go中,输入和输出操作都是使用原语实现的,原语将数据模拟成可读的
或者可写的
字节流。
而Go的io包提供了io.Reader
(将数据从某个资源读取到传输缓冲区被流式传输和使用)和io.Writer
(从缓冲区读取数据,并写入目标资源)接口。
实现了io.Reader
接口的唯一方法Read(p []byte)(n int, err error)
,它就是一个读取器。
- n 读取到的字节数
- err 发生错误的信息(注意:资源读取完毕返回io.EOF错误)
使用Reader
思路:
Reader
方法内部是循环被调用的,每次迭代都会从数据源取一块数据放入缓冲区p
,资源读取完毕返回io.EOF
错误为止。 我们通过strings.NewReader(string)
创建一个字符串读取器来迭代读取:
package main
import (
"fmt"
"io"
"os"
"strings"
)
func main() {
//创建一个字符串读取器
reader := strings.NewReader("How are you today You were in a bad mood yesterday")
//创建一个长度为3的切片
p := make([]byte, 3)
//循环取数据
for {
//读取到的字节数,err 发生错误的信息(注意:资源读取完毕返回io.EOF错误)
n, err := reader.Read(p)
if err != nil {
if err == io.EOF {
fmt.Println("The resource is read!")
break
}
fmt.Println("Read err :", err.Error())
os.Exit(1)
}
fmt.Println(string(p[:n]), p[:n])
}
}
输出打印的内容:
How [72 111 119] ar [32 97 114] e y [101 32 121] ou [111 117 32] tod [116 111 100] ay [97 121 32] You [89 111 117] we [32 119 101] re [114 101 32] in [105 110 32] a b [97 32 98] ad [97 100 32] moo [109 111 111] d y [100 32 121] est [101 115 116] erd [101 114 100] ay [97 121]
The resource is read!
拓展例子(读取文件行数并且打印每一行内容和二进制流)
package main
import (
"bufio"
"fmt"
"os"
"time"
)
func main() {
if len(os.Args) < 2 {
os.Exit(1)
}
filename := os.Args[1]
file, err := os.Open(filename)
defer file.Close()
if err != nil {
fmt.Println(err.Error())
os.Exit(1)
}
reader := bufio.NewReader(file)
var line int
fmt.Print("下面为你读取",filename,"每一行的内容:\n")
for {
lineContent, isPrefix, err := reader.ReadLine()
if err != nil {
break
}
if !isPrefix {
line++
time.Sleep(time.Second*1)
fmt.Println("第",line,"行的二进制数据流为:", lineContent,"内容是:",string(lineContent))
fmt.Print("\n")
}
}
fmt.Println("名字为:",filename,"的文件一共有:", line,"行")
}
相关文章
- mysql截取中文字符_mysql截取字符串函数-Go语言中文社区
- 2022-08-29:以下go语言代码输出什么?A:10 10;B:10 19;C:19 10;D:19 19。 package main import ( “
- Go语言之指针(二十二)
- 「Go工具箱」go语言csrf库的使用方式和实现原理
- 基于go语言的声明式流式ETL,高性能和弹性流处理器
- Go语言的性能如何?
- Go语言服务端处理HTTP、HTTPS请求
- Go语言使用事件系统实现事件的响应和处理
- 部署Go语言程序到Linux服务器
- 语言Linux下驰骋Go语言之旅(linuxgo)
- 轻松搞定Go语言连接MySQL(go连接mysql)
- MySQL中使用Go语言的好处(mysql中go什么)
- 数据库探索Go语言与Oracle数据库的结合(go语言中的oracle)
- 数据库Go语言实现监控Oracle数据库(go监听oracle)
- 数据库Go语言连接Oracle数据库的指南(go如何连接oracle)
- ODBC数据驱动程序连接Oracle数据库Go语言之旅(go使用oracle)
- 程序Go语言调用Oracle数据库驱动程序指南(go oracle驱动)
- Go语句让Oracle数据库管理更方便(oracle go语句)
- GO语言并发编程之互斥锁、读写锁详解