Volker의 답변에 추가하려면 연결 제한 시간 외에도 읽기 / 쓰기 제한 시간을 설정하려면 다음과 같이 할 수 있습니다.
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()