Go网络开发中的两个技术点

栏目: Go · 发布时间: 5年前

内容简介:最近碰到群里网友问如果检查网络连接的Timeout,联想最近看到的另一个问题, 在这篇文章统一记录一下。自 Go 1.6开始, 所有的超时导致的网络错误都可以通过更早版本的Go并没有专门的检查Timeout方法。

最近碰到群里网友问如果检查网络连接的Timeout,联想最近看到的另一个问题, 在这篇文章统一记录一下。

如果检查一个网络错误是Timeout导致的?

Go 1.6开始, 所有的超时导致的网络错误都可以通过 net.ErrorTimeout() 方法检查。

if err, ok := err.(net.Error); ok && err.Timeout() {
    ……
}

更早版本的Go并没有专门的检查Timeout方法。

可以参考: https://stackoverflow.com/questions/23494950/specifically-check-for-timeout-error

产品中一定不要使用默认的 http.Get

如果你觉得方便,直接使用 http.Get 或者类似的方法发送请求,可能会导致一些问题, 因为这默认是使用 DefaultClient 作为client:

DefaultClient

一个具体的使用默认的client导致的问题可以参考 Don’t use Go’s default HTTP client (in production)

所以Go开发过程中最好使用自己定制的Client:

var timeout = time.Duration(2 * time.Second)

func dialTimeout(network, addr string) (net.Conn, error) {
    return net.DialTimeout(network, addr, timeout)
}

func main() {
    transport := http.Transport{
        Dial: dialTimeout,
        Proxy: ...,
        MaxIdleConns: ...,
        MaxIdleConnsPerHost: ...,
        IdleConnTimeout: ...,
        ResponseHeaderTimeout: ...,
        DisableCompression:...,
    }

    client := http.Client{
        Transport: &transport,
    }

    resp, err := client.Get("http://some.url")
}

酌情设置 Transport 的参数。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

算法谜题

算法谜题

Anany Levitin、Maria Levitin / 赵勇、徐章宁、高博 / 人民邮电出版社 / 2014-1-1

算法是计算机科学领域最重要的基石之一。算法谜题,就是能够直接或间接地采用算法来加以解决的谜题。求解算法谜题是培养和锻炼算法思维能力一种最有效和最有乐趣的途径。 本书是一本经典算法谜题的合集。本书包括了一些古已有之的谜题,数学和计算机科学有一部分知识就发源于此。本书中还有一些较新的谜题,其中有一部分谜题被用作知名IT企业的面试题。全书可分为4个部分,分别是概览、谜题、提示和答案。概览介绍了算法......一起来看看 《算法谜题》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

html转js在线工具
html转js在线工具

html转js在线工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具