go - 在这种情况下使用下划线的原因是什么
问题描述
type tracingHandler struct {
handler http.Handler
}
var _ http.Handler = &tracingHandler{}
声明未使用的变量的原因是什么?
解决方案
这是包开发人员的编译时检查。tracingHandler
如果不实现http.Handler
接口,包将无法编译。
我假设这是一个中间件 http 包 - 因此开发人员确保他们的处理程序遵循标准库的http.Handler接口:
type Handler interface {
ServeHTTP(ResponseWriter, *Request)
}
因此,要编译,该tracingHandler
类型必须有一个带有指针接收器的方法——因为使用了赋值&tracingHandler{}
——并且方法签名应该如下所示:
func (h * tracingHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
// ...
}
使用空白标识符_
可确保永远不会存储分配,因此是 NOP。所以这条线纯粹是一个构建完整性检查。
推荐阅读
- c++ - 使用自由类型时的 LNK 2001
- python - python中的文件迭代问题
- python - 如何覆盖抽象属性方法而不忘记在子类中添加属性装饰器?
- java - 在 JDBC java 中创建会话
- excel - 如何使用 VBA excel 从资源中获取 og:image
- asp.net-core - 如何从 Razor 类库中获取嵌入式静态文件的列表?
- tensorflow - 来自多输入模型拱门的 Logits。从熵损失函数到单个 Tensorflow sigmoid
- javascript - 比较在 Javascript 中不起作用的 2 个数组的值
- go - 如何在运行时添加命令,或定义未知命令的行为?
- python - 不确定如何从字符串中删除空格