今天寫個簡單的程序,根據指定的 URL 來抓取相應的網頁內容,而後存入本地文件。這個程序會涉及到網絡請求和文件操做等知識點,下面是實現代碼:bash
// fetch.go package main import ( "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 對應的資源,以後讀取出資源數據,而後在控制檯打印,並將內容寫入到本地文件中。網絡
須要注意的是,在讀取資源數據完畢後,應該及時將資源流關閉,避免出現內存資源的泄露。fetch
另外,在處理異常時,咱們使用了 fm.Fprintf() 這個方法,它是格式化三大方法之一:url
- Printf: 格式化字符串並輸出到 os.Stdout 中。
- Fprintf: 格式化字符串並輸出到指定文件設備中,因此參數比 Printf 多一個文件指針 FILE*。
- Sprintf: 格式化字符串並輸出到指定字符串中,因此參數比 Printf 多一個 char*,那就是目標字符串地址。
編譯後運行程序,並指定一個 URL 參數,這裏暫時指定爲百度吧,仍是但願 Google 近期可以迴歸:指針
$ ./fetch http://www.baidu.com
運行完程序,在當前目錄中會生成一個 site.txt 文件。code