女主宣言
Go语言以其本身具有的高并发特性,在云计算开发中,得到了广泛的应用,也深受广大开发者的欢迎。但是大家对go语言真的理解了么?本文作者经过对go语言的多年实践应用,现对go语言中如何从io.Reader中读数据进行了详细介绍,相信对于go语言爱好者有很大的帮助。下来就跟随作者一起学习下吧。
PS:丰富的一线技术、多元化的表现形式,尽在“360云计算”,点关注哦!
1
概述
开发过程中,我们经常从io.Reader中读取数据。
type Reader interface {
Read(p []byte) (n int, err error)
}
一次最多读取len(p)长度的数据。
当读取遭遇到error或EOF, 会返回已读取的数据的字节数和error或EOF。
Read方法,不会修改len(p)的大小。
使用io.EOF 代表结束了。
Talk is cheap. Show me the code ,下面是一个从read读取的案例:
package main
import (
"fmt"
"io"
"net"
)
func main() {
// 建立tcp连接
conn, err := net.Dial("tcp", "www.findme.wang:80")
if err != nil {
fmt.Println("dial error:", err)
return
}
defer conn.Close() // 关闭连接
// 构建http协议内容,发起http请求
httpReq := `GET / HTTP/1.0
Host: www.findme.wang
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36
Content-Type:application/x-www-form-urlencoded
Content-Length:0
`
_, err = fmt.Fprintf(conn, httpReq)
if err != nil {
fmt.Println("http request error:", err)
return
}
// read from conn
rsData :