package main
import (
"fmt"
"io"
"net/http"
"os"
)
type MyDownloader struct {
io.Reader
Total int64
Current int64
}
func (d *MyDownloader) Read(p []byte) (n int, err error) {
n, err = d.Reader.Read(p)
d.Current += int64(n)
fmt.Printf("\r正在下载,下载进度:%.2f%%", float64(d.Current*10000/d.Total)/100)
if d.Current == d.Total {
fmt.Printf("\r下载完成,下载进度:%.2f%%", float64(d.Current*10000/d.Total)/100)
}
return
}
func downloadFile(url, filePath string) {
resp, err := http.Get(url)
if err != nil {
panic(err)
}
defer resp.Body.Close()
file, err := os.Create(filePath)
if err != nil {
panic(err)
}
defer file.Close()
myDownloader := &MyDownloader{
Reader: resp.Body,
Total: resp.ContentLength,
}
if _, err := io.Copy(file, myDownloader); err != nil {
panic(err)
}
}
func main() {
url := "https://zme-caps.amazon.com/t/EKUMJMIvkrHK/lrKTtMebcbn0ZIWZqsr2GGNPBc-BxtGxR28ME-X6bPk/17"
filename := "./wegame.zip"
downloadFile(url, filename)
}