今天扣丁学堂区块链培训老师给大家介绍一下关于Go语言中io包的使用,首先Go是谷歌2009发布的第二款编程语言。2009年7月份,谷歌曾发布了Simple语言,它是用来开发Android应用它是用来开发Android应用的一种BASIC语言。很多人喜欢Go语言,其实是因为Go语言有其独特的语言属性在支撑着其在编程语言界的发展,下面我们一起来看一下吧。
![扣丁学堂区块链GO语言开发之io包使用详解](http://p2.ttnews.xyz/loading.gif)
io包为I/O原语提供了基础的接口.它主要包装了这些原语的已有实现,如os包中的那些,抽象成函数性的共享公共接口,加上一些其它相关的原语,由于这些接口和原语以不同的实现包装了低级操作,因此除非另行通知,否则客户不应假定它们对于并行执行是安全的。
在io包中最重要的是两个接口:Reader和Writer接口,首先来介绍这两个接口:
type Reader interface {
Read(p byte) (n int,err error)
}
Reader接口包装了基本的Read方法。
Read将len(p)个字节读取到p中。它返回读取的字节数n(当Read在成功读取n>0个字节后遇到一个错误或EOF情况,它就会返回读取的字节数。它会从相同的调用中返回(非nil的)错误或从随后的调用中返回错误(和n==0)。这种一般情况的一个例子就是Reader在输入流结束时会返回一个非零的字节数,可能的返回不是err==EOF就是err==nil。无论如何,下一个Read都应当返回0,EOF。
调用者应当总在考虑到错误err前处理n>0的字节。这样做可以在读取一些字节,以及允许的EOF行为后正确地处理I/O错误。
Read的实现会阻止返回零字节的计数和一个nil错误,调用者应将这种情况视作空操作。
type Writer interface {
Write(p byte) (n int, err error)
}
Writer接口包装了基本的Write方法。
Write将len(p)个字节从p中写入到基本数据流中。它返回从p中被写入的字节数n(0
Io包中的函数(方法):
funcReadFull(rReader,bufbyte)(nint,errerror)
这个函数可以把对象r中的数据读出来,然后存入一个缓冲区buf中,以便其它代码可以处理buf中的数据。
这里有个问题,ReadFull函数究竟可以读取哪些对象的数据?可以读文件中的数据吗?可以读网络中的数据吗?可以读数据库中的数据吗?可以读磁盘中的扇区吗?可以读内存中的数据吗?
答案是ReadFull可以读取任何对象的数据,但是有个前提,就是这个对象必须符合Reader的标准。
Reader的标准是什么呢?下面是Reader的定义:
type Reader interface {
Read(p byte) (n int, err error)
}
从上面的定义可以看出,Reader的标准很简单,只要某个对象实现了Read方法,这个对象就符合了Reader的标准,就可以被ReadFull读取。
太简单了,只需要实现Read方法,不需要做其它任何事情。下面我们就来定义一个自己的类型,然后实现Read方法:
//定义一个Ustr类型(以string为基类型)
typeUstrstring
//实现Ustr类型的Read方法
func(sUstr)Read(pbyte)(nint,errerror){
i,ls,lp:=0,len(s),len(p)
for;i
//将小写字母转换为大写字母,然后写入p中
ifs[i]>='a'&&s[i]
p[i]=s[i]+'A'-'a'
}else{
p[i]=s[i]
}
}
//根据读取的字节数设置返回值
switchi{
caselp:
returni,nil
casels:
returni,io.EOF
default:
returni,errors.New("ReadFail")
}
}
接下来,我们就可以用ReadFull方法读取Ustr对象的数据了:
funcmain{
us:=Ustr("HelloWorld!")//创建Ustr对象us
buf:=make(byte,32)//创建缓冲区buf
n,err:=io.ReadFull(us,buf)//将us中的数据读取到buf中
fmt.Printf("%s\n",buf)//显示buf中的内容
//HELLOWORLD!
fmt.Println(n,err)//显示返回值
//12unexpectedEOF
}
我们很快就实现了Reader的要求,这个Reader就是一个接口,接口就是一个标准,一个要求,一个规定,这个规定就是“要实现接口中的方法”。只要某个对象符合Reader接口的要求,那么这个对象就可以当作Reader接口来使用,就可以传递给ReadFull方法。
所以,只要文件对象实现了Read方法,那么ReadFull就可以读取文件中的数据,只要网络对象实现了Read方法,ReadFull就可以读取网络中的数据,只要数据库实现了Read方法,ReadFull就可以读取数据库中的数据,只要磁盘对象实现了Read方法,ReadFull就可以读磁盘中的数据,只要内存对象实现了Read方法,ReadFull就可以读取内存中的数据,只要任何一个对象实现了Read方法,ReadFull就可以读取该对象的数据。
以上就是关于扣丁学堂区块链培训Go语言中io包使用的详细介绍,希望容对大家学习区块链开发有所帮助,想要了解更多关于区块链方面内容的小伙伴可以登录扣丁学堂官网咨询,此外扣丁学堂区块链视频教程80%供学员免费在线观看,想要学习区块链的小伙伴快到扣丁学堂报名吧。
标签: 区块链培训 区块链技术 区块链开发 区块链视频教程 比特币 以太坊
閱讀更多 扣丁學堂 的文章