首页 > 解决方案 > DefaultHandler 是结构的 (*DefaultHandler)(nil) 是什么意思?

问题描述

*DefaultHandler我可以理解最后一行代码的含义:它提供了一个满足EasygateHandler接口的静态(编译时)检查。但我不明白这是什么意思,有(*DefaultHandler)(nil)什么区别(*DefaultHandler)()

type DefaultHandler struct {
    log logrus.FieldLogger
    svc *service.DefaultResolver
}

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

标签: go

解决方案


该表达式(*DefaultHandler)(nil)是从无类型 nil 到 type 的零值的转换*DefaultHandler

转换的形式是T(x)whereT是一个类型,x是一个可以转换为 type 的值T。在这个例子中,T*DefaultHandlerxnil。需要用括号*DefaultHandler将转换为指针类型与取消引用 aa 转换为非指针类型区分开来。

该表达式(*DefaultHandler)()不是有效的 Go 语法。

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


推荐阅读