我有以下简单的golang程序来下载Google的隐私政策.不幸的是,即使文件长得多,它总是在错误的EOF之后读取6861字节而崩溃.为什么?
package main import "net" import "fmt" import "io" import "os" func die(msg string,s os.Error) { fmt.Printf("%s crashed: %v\n",msg,s) os.Exit(1) } func main() { fd,err := net.Dial("tcp","google.com:80") if err != nil { die("dial",err) } req := []byte("GET /intl/en/privacy/ HTTP/1.0\r\nHost: www.google.com\r\n\r\n") _,err = fd.Write(req) if err != nil { die("dial write",err) } buf := make([]byte,1024) nr := 1 for nr > 0 { nr,err = io.ReadFull(fd,buf) if err != nil { die("dial read",err) } fmt.Printf("read %d\n",nr) } }
输出:
read 1024 read 1024 read 1024 read 1024 read 1024 read 1024 dial read crashed: unexpected EOF
函数io.ReadFull(fd,buf)只有当您知道fd可以至少提供len(buf)字节时才能使用.
相反,请尝试以下操作:
var buf bytes.Buffer nr,err := io.Copy(&buf,fd) if err != nil { die("dial read",err) }
如果复制到一个文件,使用os.File而不是bytes.Buffer.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。