我可以理解整个代码的最后一行的含义:它提供了*DefaultHandler
满足EasygateHandler
接口的静态(编译时)检查。但是我无法理解(*DefaultHandler)(nil)
的含义以及与(*DefaultHandler)()
type DefaultHandler struct {
log logrus.FieldLogger
svc *service.DefaultResolver
}
var _ easygate.EasygateHandler = (*DefaultHandler)(nil)
答案 0 :(得分:2)
表达式(*DefaultHandler)(nil)
是从无类型nil到类型*DefaultHandler
的零值的conversion。
转换的格式为T(x)
,其中T
是类型,而x
是可以转换为类型T
的值。在此示例中,T
是*DefaultHandler
,而x
是nil
。需要用*DefaultHandler
括起来,以将对指针类型的转换与对非指针类型的转换取消引用区分开。
表达式(*DefaultHandler)()
无效的Go语法。
如果&DefaultHandler{}
是具有复合文字语法的类型,则也可以使用值DefaultHandler
。转换模式适用于所有类型。