• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Go语言圣经习题练习_1.5. 获取URL

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

练习 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参数没有 http:// 前缀的话,为这个url加上该前缀。你可能会用到strings.HasPrefix这个函数。

练习 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()
	}
}

  

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap