在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
练习 1.7: 函数调用io.Copy(dst, src)会从src中读取内容,并将读到的结果写入到dst中,使用这个函数替代掉例子中的ioutil.ReadAll来拷贝响应结构体到os.Stdout,避免申请一个缓冲区(例子中的b)来存储。记得处理io.Copy返回结果中的错误。 func main() { for _,url := range os.Args[1:] { resp,err := http.Get(url) if err != nil { fmt.Fprintf(os.Stderr, "http-get: %v\n",err) os.Exit(10) } //b,err := ioutil.ReadAll(resp.Body) _, err = io.Copy(os.Stdout, resp.Body) //在这里输出内容到标准输出 if err != nil { fmt.Fprintf(os.Stderr,"fetch: reading %s: %v\n", url,err) os.Exit(10) } resp.Body.Close() } } 练习 1.8: 修改fetch这个范例,如果输入的url参数没有 练习 1.9: 修改fetch打印出HTTP协议的状态码,可以从resp.Status变量得到该状态码。 func main() { for _,url := range os.Args[1:] { if ! strings.HasPrefix(url,"http://") { //在这里判断输入的url是否含有 http:// url = "http://" + url } resp,err := http.Get(url) if err != nil { fmt.Fprintf(os.Stderr, "http-get: %v\n",err) os.Exit(10) } fmt.Printf("http-get: %v\n",resp.Status) //打印出HTTP协议的状态码 //b,err := ioutil.ReadAll(resp.Body) _, err = io.Copy(os.Stdout, resp.Body) if err != nil { fmt.Fprintf(os.Stderr,"fetch: reading %s: %v\n", url,err) os.Exit(10) } resp.Body.Close() } }
|
请发表评论