http - 这个表达式中的圆括号是什么意思?(&net.Dialer{Timeout: 5 * time.Second}).DialContext
问题描述
&http.Client{
Transport: &http.Transport{
DialContext: (&net.Dialer{Timeout: 5 * time.Second}).DialContext,
TLSHandshakeTimeout: 5 * time.Second,
},
Timeout: 15 * time.Second,
},
在此代码片段中,为什么 DialContext 字段值位于圆括号中?
(&net.Dialer{Timeout: 5 * time.Second}).DialContext,
这是什么意思?
解决方案
它用于对表达式进行分组。
如果没有括号,则表示:
&(net.Dialer{Timeout: 5 * time.Second}.DialContext)
所以这意味着取net.Dialer.DialContext
方法的地址,这显然不是本意。
目的是创建一个*net.Dialer
值(通过获取net.Dialer{}
复合文字的地址),并使用方法值来获取函数值,该函数值net.Dialer
将分配给Transport.DialContext
函数类型的字段
func(ctx context.Context, network, addr string) (net.Conn, error)
Dialer.DialContext()
具有与附加接收器类型相同的签名:
func (d *Dialer) DialContext(ctx context.Context, network, address string) (Conn, error)
这没关系,因为方法值是没有接收器类型的函数类型。
推荐阅读
- .net - ASP.NET 哨兵配置
- python-3.x - 如何使用 Python 安装 .reg 文件
- angular - Get Observable 不发送到后端
- python - zip() 函数跟踪压缩列表中的变化
- deployment - Google Cloud Platform - 指定项目名称
- ios - 关闭开关时如何取消选择行
- python - Pandas - 将数据框列导出为保留空值的整数
- python - 如何按空格分割一行以使字符串不分割为每个字符?
- asp.net-mvc - User.Identity.IsAuthenticated 登录后仍然为假
- c++ - OpenCV 中的 Mat 和 SparseMat 有什么区别?