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\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()
	}
}

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM