gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:09:40 25 4
gpt4 key购买 nike

可以检测到未使用的私有(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com