为什么Golang允许编译未使用的函数?

时间:2015-09-14 12:33:25

标签: go

可以检测到未使用的私人/未导出的功能。编译器为什么不像未使用的变量那样抱怨?

编辑:该问题也适用于未使用的私有类型/接口。

1 个答案:

答案 0 :(得分:2)

我认为这是范围和默认界面{}的组合。

这就是你可以在包级别声明一个未使用的变量并且代码构建得很好的原因。

此代码段完全有效,请转到代码:

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))
}

即使也从未使用变量 testVar

这里有几个相关问题,我认为它们都有相同的一般答案。

  • 为什么不允许使用未使用的变量?
  • 为什么未使用的变量不允许使用未使用的函数参数?
  • 为什么允许使用未使用的函数/结构?

...

一般的答案是,函数范围内未使用的变量总是浪费编译器时间或合法错误 - 因此严格禁止它们。

但是,未使用的函数参数以及私有结构和函数可能满足接口。它们至少满足默认接口{}。因此,它们根本不能保证是错误的。

似乎没有任何官方文件概述golang哲学这一特定角落背后的推理,但正如the answer to a similar question所指出的那样,你可能会更好地找到答案并在{ {3}}

希望这有帮助!