वोल्कर के उत्तर में जोड़ने के लिए, यदि आप कनेक्ट टाइमआउट के अलावा रीड / राइट टाइमआउट सेट करना चाहते हैं, तो आप निम्न की तरह कुछ कर सकते हैं
package httpclient
import (
"net"
"net/http"
"time"
)
func TimeoutDialer(cTimeout time.Duration, rwTimeout time.Duration) func(net, addr string) (c net.Conn, err error) {
return func(netw, addr string) (net.Conn, error) {
conn, err := net.DialTimeout(netw, addr, cTimeout)
if err != nil {
return nil, err
}
conn.SetDeadline(time.Now().Add(rwTimeout))
return conn, nil
}
}
func NewTimeoutClient(connectTimeout time.Duration, readWriteTimeout time.Duration) *http.Client {
return &http.Client{
Transport: &http.Transport{
Dial: TimeoutDialer(connectTimeout, readWriteTimeout),
},
}
}
इस कोड का परीक्षण किया गया है और उत्पादन में काम कर रहा है। परीक्षणों के साथ पूर्ण जिस्म यहाँ उपलब्ध है
https://gist.github.com/dmichael/5710968
इस बात से अवगत रहें कि आपको प्रत्येक अनुरोध के लिए एक नया ग्राहक बनाने की आवश्यकता होगी क्योंकि conn.SetDeadline
इससे भविष्य में एक बिंदु का संदर्भ मिलता हैtime.Now()