標籤:code 輸出 方法 ring 檔案 http efi 根據 stderr
今天寫個簡單的程式,根據指定的URL來抓取相應的網頁內容,然後存入本地檔案。這個程式會涉及到網路請求和檔案操作等知識點,下面是實現代碼:
// fetch.gopackage mainimport ( "os" "fmt" "net/http" "io/ioutil")func main() { url := os.Args[1] // 根據URL擷取資源 res, err := http.Get(url) if err != nil { fmt.Fprintf(os.Stderr, "fetch: %v\n", err) os.Exit(1) } // 讀取資源資料 body: []byte body, err := ioutil.ReadAll(res.Body) // 關閉資源流 res.Body.Close() if err != nil { fmt.Fprintf(os.Stderr, "fetch: reading %s: %v\n", url, err) os.Exit(1) } // 控制台列印內容 以下兩種方法等同 fmt.Printf("%s", body) fmt.Printf(string(body)) // 寫入檔案 ioutil.WriteFile("site.txt", body, 0644)}
上面的代碼中,我們引入了net/http
網路包,然後調用http.Get(url)
方法擷取URL對應的資源,之後讀取出資源資料,然後在控制台列印,並將內容寫入到本地檔案中。
需要注意的是,在讀取資源資料完畢後,應該及時將資源流關閉,避免出現記憶體資源的泄露。
另外,在處理異常時,我們使用了fm.Fprintf()
這個方法,它是格式化三大方法之一:
Printf
: 格式化字串並輸出到os.Stdout
中。
Fprintf
: 格式化字串並輸出到指定檔案裝置中,所以參數比printf多一個檔案指標FILE*
。
Sprintf
: 格式化字串並輸出到指定字串中,所以參數比printf多一個char*
,那就是目標字串地址。
編譯後運行程式,並指定一個URL參數,這裡暫時指定為百度吧,還是希望Google近期能夠迴歸:
$ ./fetch http://www.baidu.com
運行完程式,在目前的目錄中會產生一個site.txt
檔案。
Golang系列文章:抓取網頁內容