例如一个很简单的下载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入手么?