go - DefaultHandler 是结构的 (*DefaultHandler)(nil) 是什么意思?
问题描述
*DefaultHandler
我可以理解最后一行代码的含义:它提供了一个满足EasygateHandler
接口的静态(编译时)检查。但我不明白这是什么意思,有(*DefaultHandler)(nil)
什么区别(*DefaultHandler)()
type DefaultHandler struct {
log logrus.FieldLogger
svc *service.DefaultResolver
}
var _ easygate.EasygateHandler = (*DefaultHandler)(nil)
解决方案
该表达式(*DefaultHandler)(nil)
是从无类型 nil 到 type 的零值的转换*DefaultHandler
。
转换的形式是T(x)
whereT
是一个类型,x
是一个可以转换为 type 的值T
。在这个例子中,T
是*DefaultHandler
和x
是nil
。需要用括号*DefaultHandler
将转换为指针类型与取消引用 aa 转换为非指针类型区分开来。
该表达式(*DefaultHandler)()
不是有效的 Go 语法。
如果是具有复合文字语法的类型,&DefaultHandler{}
也可以使用该值。DefaultHandler
转换模式适用于所有类型。
推荐阅读
- jquery - Angular 6 导入 JQVMap - 类型“JQuery”上不存在属性“vectorMap”
' - internet-explorer - IE 中的 sinonjs Karma 测试无法运行
- android - 我们可以在 1 个移动应用程序中制作 2 个侧边栏导航抽屉吗?
- magento - Magento 2 菜单未显示新添加的类别
- node.js - 使用 AMQP、rhea 和 Node 从 Azure 服务总线队列查看消息时出现“amqp:internal-error”
- sql - 仅选择同一表中重复的最新记录
- excel - 如何使用 excel 在较大的字符串中搜索大量的短文本字符串?
- android - 程序类型已存在:android.support.v4.app.BackStackRecord$Op:收到此错误消息
- javascript - .split() 不是函数错误
- php - 找不到类“MongoDB\Driver\Manager”(未加载扩展)