首页 > 解决方案 > 在这种情况下使用下划线的原因是什么

问题描述

我有以下代码片段

type tracingHandler struct {
    handler http.Handler
}

var _ http.Handler = &tracingHandler{}

声明未使用的变量的原因是什么?

标签: go

解决方案


这是包开发人员的编译时检查。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。所以这条线纯粹是一个构建完整性检查。


推荐阅读