關於golang http.HttpClient.Do的問題
func (c *Clients) PushData(reader io.Reader) error {
log.Println("進入pushData")
path := c.Slave.LocalFolder
if strings.HasPrefix(path, "/") == false {
path = "/" + path
}
buffer := new(bytes.Buffer)
_, err := io.Copy(buffer, reader)
if err != nil {
log.Fatal(err)
return err
}
contentType := http.DetectContentType(buffer.Bytes())
params := map[string]string{}
// log.Println(contentType, "contentType")
params["Content-Type"] = contentType
resp, err := c.DoRequest("PUT", path, params, buffer)
if err != nil {
log.Fatal(err)
return err
}
body, _ := ioutil.ReadAll(resp.Body)
defer resp.Body.Close()
if resp.StatusCode != 200 {
err := errors.New(resp.Status)
log.Println(string(body))
return err
}
return nil
}
func (c *Clients) DoRequest(method, path string, params map[string]string, data io.Reader) (*http.Response, error) {
reqUrl := "http://" + c.Slave.IpAddr + path
log.Println("進入reqUrl", reqUrl)
req, _ := http.NewRequest(method, reqUrl, data)
date := time.Now().UTC().Format("Mon, 02 Jan 2006 15:04:05 GMT")
req.Header.Set("Date", date)
req.Header.Set("Host", c.Master.IpAddr)
if params != nil {
for k, v := range params {
req.Header.Set(k, v)
}
}
if data != nil {
req.Header.Set("Content-Length", strconv.Itoa(int(req.ContentLength)))
}
// log.Println(req)
// c.HttpClient.Do(req)
// c.HttpClient.Timeout = time.Duration(time.Second * 10)
resp, err := c.HttpClient.Do(req)
log.Fatal("==============================")
log.Println(resp)
log.Fatal(err)
log.Fatal("==============================")
return resp, err
}
關於這兩段程式碼,在執行的時候 會在
resp, err := c.HttpClient.Do(req) 這邊丟擲一個
panic: runtime error: invalid memory address or nil pointer dereference
Äsignal SIGSEGV: segmentation violation code=0x1 addr=0x28 pc=0x830c6Ü
goroutine 5 ÄrunningÜ:
panic(0x389560, 0xc42000c0b0)
/usr/local/go/src/runtime/panic.go:500 +0x1a1
net/http.(*Client).deadline(0x0, 0xc420166010, 0x420d7c, 0x5)
/usr/local/go/src/net/http/client.go:193 +0x26
net/http.(*Client).doFollowingRedirects(0x0, 0xc4201c4000, 0x423400, 0x3, 0xb6901, 0xc420146210)
/usr/local/go/src/net/http/client.go:446 +0x8b
net/http.(*Client).Do(0x0, 0xc4201c4000, 0xe, 0xc420176170, 0x5)
/usr/local/go/src/net/http/client.go:187 +0x11d
的異常,我看了下 這個地方是關於deadline的 嘗試了下給httpClient.TimeOut賦值,還是會丟擲resp, err := c.HttpClient.Do(req)
panic: runtime error: invalid memory address or nil pointer dereference
Äsignal SIGSEGV: segmentation violation code=0x1 addr=0x28 pc=0x830c6Ü 這樣一個錯誤。夜深,寫的有點懵了。。。 希望高人指點下。。。
具體業務是put一個檔案到遠端資料夾。。。
更多原創文章乾貨分享,請關注公眾號
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- 關於golang.org/x包問題Golang
- 關於SQLServerDriver的問題SQLServer
- 關於 JavaMail 的問題JavaAI
- 關於session的問題Session
- 關於javascript的this指向問題JavaScript
- 關於跨域的問題跨域
- 關於bit code的問題
- 關於序列同步的問題
- 關於IP地址的問題
- 關於橋模式的問題模式
- 求救 關於parallel的問題Parallel
- 關於web start的問題Web
- 關於action的error問題Error
- 關於ADAPTER的問題APT
- 關於session的奇怪問題Session
- php關於session的問題PHPSession
- 關於diag程式的問題
- 關於SimpleJdonFrameworkTest的問題Framework
- 關於 Puerts 的效能問題
- 關於盒模型相關的問題模型
- 關於FastHashMap問題ASTHashMap
- 關於golang的goroutine schedulerGolang
- 關於PHP佇列的問題PHP佇列
- 關於 Laravel 分頁的問題?Laravel
- 關於css權值的問題CSS
- 關於搜尋地址的問題
- 關於PWA落地問題的思考
- 關於 API 合併的問題API
- 關於excelize庫的使用問題Excelize
- 關於scanf函式的問題函式
- 關於session leak的問題分析Session
- 關於oracle的監聽問題Oracle
- 關於partition table import的問題Import
- 關於資料共享的問題
- 關於mysql連線的問題MySql
- 關於物件持久化的問題物件持久化
- 關於Cookie跨域的問題Cookie跨域
- 關於函式索引的問題?函式索引