This question already has an answer here:
Specs: What's the purpose of the blank identifier in variable assignment? [duplicate]

(1个答案)


去年关闭。




我可以理解整个代码的最后一行的含义:它提供了一个静态(编译时)检查,以确保*DefaultHandler满足EasygateHandler接口。但是我不明白(*DefaultHandler)(nil)的含义是什么以及(*DefaultHandler)()的区别是什么
type DefaultHandler struct {
    log logrus.FieldLogger
    svc *service.DefaultResolver
}

var _ easygate.EasygateHandler = (*DefaultHandler)(nil)

最佳答案

表达式(*DefaultHandler)(nil)是从无类型nil到*DefaultHandler类型的零值的conversion

转换采用T(x)的形式,其中T是类型,而x是可以转换为T类型的值。在此示例中,T*DefaultHandlerxnil。需要在*DefaultHandler周围加上括号,以区分对指针类型的转换与对非指针类型的转换取消引用。

表达式(*DefaultHandler)()无效的Go语法。

如果&DefaultHandler{}是具有复合文字语法的类型,则也可以使用值DefaultHandler。转换模式适用于所有类型。

关于go - (* DefaultHandler)(nil)是什么意思,其中DefaultHandler是一个结构体? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57386054/

10-10 09:51