這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
package mainimport ( "http" "os" "io" "strconv")const ( UA = "Golang Downloader from Kejibo.com")func main() { f, err := os.OpenFile("./file.exe", os.O_RDWR, 0666) //其實這裡的 O_RDWR應該是 O_RDWR|O_CREATE,也就是檔案不存在的情況下就建一個空檔案,但是因為windows下還有BUG,如果使用這個O_CREATE,就會直接清空檔案,所以這裡就不用了這個標誌,你自己事先建立好檔案。 if err != nil { panic(err) } stat, err := f.Stat() //擷取檔案狀態 if err != nil { panic(err) } f.Seek(stat.Size, 0) //把檔案指標指到檔案末,當然你說為何不直接用 O_APPEND 模式開啟,沒錯是可以。我這裡只是實驗。 url := "http://dl.google.com/chrome/install/696.57/chrome_installer.exe" var req http.Request req.Method = "GET" req.UserAgent = UA req.Close = true req.URL, err = http.ParseURL(url) if err != nil { panic(err) } header := http.Header{} header.Set("Range", "bytes=" + strconv.Itoa64(stat.Size) + "-") req.Header = header resp, err := http.DefaultClient.Do(&req) if err != nil { panic(err) } written, err := io.Copy(f, resp.Body) if err != nil { panic(err) } println("written: ", written)}