के लिए जाँच मैं जब एक वेब सेवा बुला समय समाप्ति के लिए जाँच करने के लिए निम्नलिखित है, लेकिन मैं विशेष रूप से जाँच करने के लिए अगर वहाँ एक टाइमआउट त्रुटि लौटे चाहते हैं का उपयोग करें।विशेष रूप से टाइमआउट त्रुटि
// Timeout
type Timeout struct {
Connect time.Duration
ReadWrite time.Duration
}
// TimeoutDialer
func TimeoutDialer(timeout *Timeout) func(net, addr string) (c net.Conn, err error) {
return func(netw, addr string) (net.Conn, error) {
conn, err := net.DialTimeout(netw, addr, timeout.Connect)
if err != nil {
return nil, err
}
conn.SetDeadline(time.Now().Add(timeout.ReadWrite))
return conn, nil
}
}
// HttpClient
func HttpClient(config Config) *http.Client {
to := &Timeout{
Connect: time.Duration(config.MaxWait) * time.Second,
ReadWrite: time.Duration(config.MaxWait) * time.Second,
}
return &http.Client{
Transport: &http.Transport{
Dial: TimeoutDialer(to),
},
}
}
उल्लेख करना भूल गया , यदि आप अपने कनेक्शन पर पूर्ण समय सीमा निर्धारित करने जा रहे हैं तो आपको परिवहन में Keepalive बंद करना चाहिए। अन्यथा आप कनेक्शन का पुन: उपयोग करते समय टाइमआउट प्राप्त करने का जोखिम उठाते हैं। – JimB