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

Mil*_*les 12 variables parameters compilation go

Go来自C的一个比较值得注意的方面是,如果在其中声明了未使用的变量,编译器将不会构建您的程序.那么,如果在函数中声明了未使用的参数,那么为什么要构建这个程序呢?

func main() {
    print(computron(3, -3));
}


func computron(param_a int, param_b int) int {
    return 3 * param_a;
}
Run Code Online (Sandbox Code Playgroud)

Lin*_*ope 23

没有正式的理由,但golang-nuts给出的理由是:

未使用的变量总是编程错误,而编写一个不使用其所有参数的函数是很常见的.

可以将这些参数保留为未命名(使用_),但这可能会与函数混淆

func foo(_ string,_ int)//这该怎么办?

这些名称即使未被使用,也会提供重要文件.

安德鲁

https://groups.google.com/forum/#!topic/golang-nuts/q09H61oxwWw

有时使用未使用的参数对于满足接口很重要,一个示例可能是在加权图上操作的函数.如果要在所有边缘上实现具有统一成本的图形,则考虑节点是没有用的:

func (graph *MyGraph) Distance(node1,node2 Node) int {
    return 1
}
Run Code Online (Sandbox Code Playgroud)

正如该线程所指出的那样,有一个有效的参数只允许参数命名,_如果它们未被使用(例如Distance(_,_ Node)),但此时由于Go 1的未来兼容性保证已经太晚了.由于提到,一个可能的反对意见反正是参数,即使不使用,可以隐提供的文档.

简而言之:没有具体的,具体的答案,除了他们只是最终任意(但仍然受过教育)确定未使用的参数比未使用的局部变量和导入更重要和有用.如果曾经有一个强大的设计理由,那么任何地方都没有记录.

  • 我同意.有时您需要使用未使用的参数来实现一个函数,以满足接口. (3认同)
  • 我明白了 - 第一类函数和函数作为类型。凉爽的! (2认同)