我相信这是范围和默认接口 {} 的组合。
这与您可以在包级别声明未使用的变量并且代码将正常构建的原因相同。
这个片段是完全有效的 go 代码:
package main
import (
"fmt"
"time"
)
var (
testVar = "sup"
)
func main() {
start := time.Now()
fmt.Println("This sure was a test")
//Mon Jan 2 15:04:05 -0700 MST 2006
fmt.Println("Finished!\nTimeElapsed:", time.Since(start))
}
Run Code Online (Sandbox Code Playgroud)
即使变量testVar从未被使用过。
这里有几个相关的问题,我认为它们都有相同的一般答案。
...
一般的答案是,函数范围内未使用的变量总是要么浪费编译器时间,要么产生合法错误 - 因此严格不允许使用它们。
但是,未使用的函数参数以及私有结构和函数可能满足接口。至少它们都满足默认接口 {}。因此,它们根本不能保证是错误的。
似乎没有任何官方文档概述了 golang 哲学的这个特定角落背后的推理,但正如类似问题的答案中所指出的,您可能会更幸运地在golang-nuts 论坛上找到答案并提出问题。
希望这可以帮助!