我正在学习Go,但我觉得在编译时,我不应该留下任何未使用的变量或包,这有点烦人。
这真的让我慢下来了。例如,我只想声明一个新包并计划稍后使用它,或者只是取消某些命令的注释以进行测试。我总是得到错误,需要注释所有这些使用。
在围棋中,有什么方法可以避免这种检查吗?
我正在学习Go,但我觉得在编译时,我不应该留下任何未使用的变量或包,这有点烦人。
这真的让我慢下来了。例如,我只想声明一个新包并计划稍后使用它,或者只是取消某些命令的注释以进行测试。我总是得到错误,需要注释所有这些使用。
在围棋中,有什么方法可以避免这种检查吗?
当前回答
目前还没有提到的一个角度是用于编辑代码的工具集。
使用Visual Studio代码和lukehoban的名为Go的扩展将为你做一些自动魔术。Go扩展自动运行gofmt, golint等,并删除和添加导入项。所以至少这部分是自动的。
我承认这不是问题的100%解决方案,但无论如何足够有用。
其他回答
你可以使用一个简单的“null函数”,例如:
func Use(vals ...interface{}) {
for _, val := range vals {
_ = val
}
}
你可以这样使用:
package main
func main() {
a := "declared and not used"
b := "another declared and not used"
c := 123
Use(a, b, c)
}
这里还有一个包,所以你不必每次都定义Use函数:
import (
"github.com/lunux2008/xulu"
)
func main() {
// [..]
xulu.Use(a, b, c)
}
这个错误迫使您编写更好的代码,并确保使用您声明或导入的所有内容。它使阅读其他人编写的代码更容易(您总是可以确定所有声明的变量都将被使用),并避免一些可能的死代码。
但是,如果你真的想跳过这个错误,你可以使用空白标识符(_):
package main
import (
"fmt" // imported and not used: "fmt"
)
func main() {
i := 1 // i declared and not used
}
就变成了
package main
import (
_ "fmt" // no more error
)
func main() {
i := 1 // no more error
_ = i
}
正如kostix在下面的评论中所说,你可以在FAQ中找到Go团队的官方立场:
未使用变量的存在可能表明存在错误,而未使用的导入只会降低编译速度。在代码树中积累足够多的未使用的导入,事情就会变得非常缓慢。由于这些原因,围棋两者都不允许。
据我所知,Go编译器中的这些行看起来像注释掉的那些行。您应该能够构建自己的工具链,忽略这些适得其反的警告。
如果其他人很难理解这一点,我认为用非常直接的术语解释它可能会有所帮助。如果你有一个你不使用的变量,例如你已经注释掉调用的函数(一个常见的用例):
myFn := func () { }
// myFn()
你可以给函数赋值一个无用的/空白的变量,这样它就不再被使用了:
myFn := func () { }
_ = myFn
// myFn()
目前还没有提到的一个角度是用于编辑代码的工具集。
使用Visual Studio代码和lukehoban的名为Go的扩展将为你做一些自动魔术。Go扩展自动运行gofmt, golint等,并删除和添加导入项。所以至少这部分是自动的。
我承认这不是问题的100%解决方案,但无论如何足够有用。