内容简介:最近碰到群里网友问如果检查网络连接的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中配置具有两个连接池的两个数据源
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
数字化生存
(美)Nicholas Negroponte(尼古拉·尼葛洛庞帝) / 胡泳、范海燕 / 电子工业出版社 / 2017-1-1 / 68.00
《数字化生存》描绘了数字科技为我们的生活、工作、教育和娱乐带来的各种冲击和其中值得深思的问题,是跨入数字化新世界的*指南。英文版曾高居《纽约时报》畅销书排行榜。 “信息的DNA”正在迅速取代原子而成为人类生活中的基本交换物。尼葛洛庞帝向我们展示出这一变化的巨大影响。电视机与计算机屏幕的差别变得只是大小不同而已。从前所说的“大众”传媒正演变成个人化的双向交流。信息不再被“推给”消费者,相反,人们或他......一起来看看 《数字化生存》 这本书的介绍吧!
RGB转16进制工具
RGB HEX 互转工具
随机密码生成器
多种字符组合密码