例如一个很简单的下载github上raw文件的函数,conn总是一次性读取到了响应body的所有数据,无法像nodejs那种接收chunk,计算chunk大小来制作进度条。请问在go中是怎样制作下载进度条?
```go
package util
import (
"io/ioutil"
"net/http"
"net/url"
"path"
)
func Download(URL string)(error) {
resp, err := http.Get(URL)
if err != nil {
return err
}
defer resp.Body.Close()
data, err := ioutil.ReadAll(resp.Body)
if err != nil {
return err
}
u, err := url.Parse(URL)
if err != nil {
return err
}
fileName := path.Base(u.Path)
err = ioutil.WriteFile(fileName, data, 0755)
if err != nil {
return err
}
return nil
}
```
我该从tcp入手么?
使用 bufio 的reader来读,
```golang
reader := bufio.NewReader(resp.Body)
defer func(){
io.Copy(ioutil.Discard, resp.Body)
resp.Body.Close()
}()
for {
content,err:=reader.XXXXX()
if err == io.EOF {
break
}
}
```
类似这样
#5
更多评论