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

标签 go

可以检测到未使用的私有(private)/未导出函数。为什么编译器不像对待未使用的变量那样提示?

编辑:这个问题也适用于未使用的私有(private)类型/接口(interface)。

最佳答案

我相信这是范围和默认接口(interface) {} 的组合。

这与您可以在包级别声明一个未使用的变量并且代码将正常构建的原因相同。

这段代码是完全有效的 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))
}

即使从未使用过变量testVar

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

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

...

一般的答案是,函数范围内未使用的变量总是浪费编译器时间,或者是一个合理的错误 - 所以它们是严格不允许的。

但是,未使用的函数参数以及私有(private)结构和函数可能满足接口(interface)。至少他们都满足默认接口(interface){}。因此,完全不能保证它们是错误的。

似乎没有任何官方文档概述 golang 哲学这一特定角落背后的推理,但正如 the answer to a similar question 中所指出的那样在 golang-nuts forum 上找到答案和提问可能会更好.

希望这对您有所帮助!

关于go - 为什么 Golang 允许编译未使用的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32564935/

相关文章:

go - 使用工厂模式时接口(interface)应该在哪里定义?

azure - 如何从 Azure Web App 上的 go 应用程序跟踪日志

go - 从接口(interface)获取结构值

Cassandra 十进制的 Golang 类型

google-app-engine - Google App Engine 仅注销应用程序,而不是整个谷歌帐户

go - 在 for 循环中使用多个表达式

google-app-engine - 我的数据存储 PropertyLoadSaver 在 golang 中不起作用

go - 如何减少返回类型的冗长

postgresql - 连接被拒绝 : Accessing Postgres container from app container with docker-compose

go - 比较时间的分钟数。持续时间?