内容简介:最近碰到群里网友问如果检查网络连接的Timeout,联想最近看到的另一个问题, 在这篇文章统一记录一下。自 Go 1.6开始, 所有的超时导致的网络错误都可以通过更早版本的Go并没有专门的检查Timeout方法。
最近碰到群里网友问如果检查网络连接的Timeout,联想最近看到的另一个问题, 在这篇文章统一记录一下。
如果检查一个网络错误是Timeout导致的?
自 Go 1.6开始, 所有的超时导致的网络错误都可以通过 net.Error
的 Timeout()
方法检查。
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
的参数。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 国内 Java 开发者必备的两个装备,你配置上了么?
- Laravel 和 Spring Boot 两个框架比较创业篇(一:开发效率)
- 比原链开发者大会丨区块链钱包存在两个重大安全隐患
- 设计开发中要避免的两个坑和一种可借鉴的设计思想
- 国内 Java 开发者必备的两个神器:Maven国内镜像和Spring国内脚手架
- 如何在Hibernate/JPA中配置具有两个连接池的两个数据源
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Alone Together
Sherry Turkle / Basic Books / 2011-1-11 / USD 28.95
Consider Facebookit’s human contact, only easier to engage with and easier to avoid. Developing technology promises closeness. Sometimes it delivers, but much of our modern life leaves us less connect......一起来看看 《Alone Together》 这本书的介绍吧!