• Go语言*习题练习_1.5. 获取URL


    练习 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
    ",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
    ", 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
    ",err)
    			os.Exit(10)
    		}
    		fmt.Printf("http-get: %v
    ",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
    ", url,err)
    			os.Exit(10)
    		}
    		resp.Body.Close()
    	}
    }
    

      

  • 相关阅读:
    SecureCRT_FX8.0完整版
    bridge
    Quartz 框架 教程(中文版)2.2.x
    Quartz教程五:SimpleTrigger
    Quartz教程四:Trigger
    Quartz教程三:Job与JobDetail介绍
    Quartz教程二:API,Job和Trigger
    Quartz教程一:使用quartz
    Quartz教程:快速入门
    Kubernetes 1.5.3 部署
  • 原文地址:https://www.cnblogs.com/yzhch/p/6374644.html
Copyright © 2020-2023  润新知