HTTP 客户端,空闲超时

HTTP client, idle timeout

如何在 Go HTTP 客户端中设置空闲超时?

空闲超时意味着从 HTTP 客户端内部调用 Conn 接口的 Read/Write 方法超时。当客户端下载文件并且在某些时候由于读取超时而导致下载失败时,它会很有用。

您需要创建自己的 net.Dialer,即 returns 和 net.Conn 来设置适当的读写截止日期。

Conn 看起来像这样:

// Conn wraps a net.Conn, and sets a deadline for every read
// and write operation.
type Conn struct {
    net.Conn
    ReadTimeout  time.Duration
    WriteTimeout time.Duration
}

func (c *Conn) Read(b []byte) (int, error) {
    err := c.Conn.SetReadDeadline(time.Now().Add(c.ReadTimeout))
    if err != nil {
        return 0, err
    }
    return c.Conn.Read(b)
}

func (c *Conn) Write(b []byte) (int, error) {
    err := c.Conn.SetWriteDeadline(time.Now().Add(c.WriteTimeout))
    if err != nil {
        return 0, err
    }
    return c.Conn.Write(b)
}