首页 > 解决方案 > 这个表达式中的圆括号是什么意思?(&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,

这是什么意思?

标签: httpgo

解决方案


它用于对表达式进行分组。

如果没有括号,则表示:

&(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)

这没关系,因为方法值是没有接收器类型的函数类型。


推荐阅读