很多人已经提出了合理的理由,我也承认原作者的意图。然而,Rob Pike在不同的论坛上提到,Go是简化过程的结果,其他一些主流编程语言要么缺乏,要么不容易实现。这是Go语言的语义,也是为了使编译更快,有很多东西被采用,最初似乎效率低下。 简单地说,未使用的导入在Go中被认为是错误,因为它会破坏程序并减慢编译速度。使用import for side effect(_)是一种解决方法,但是,我发现有时候会混淆有效的导入与副作用沿着纯粹为了调试/测试而导入的副作用,特别是当代码库很大并且有可能忘记而不是无意中删除时,这可能会混淆其他工程师/评审员。我过去常常注解掉未使用的,然而,流行的IDE(如VS代码和Goland)可以轻松地使用goimports,它可以很好地插入和删除导入。更多信息请参考链接https://golang.org/doc/effective_go.html#blank_import
9条答案
按热度按时间gojuced71#
在包名前添加下划线(
_
)将忽略未使用的导入错误。下面是一个如何使用它的示例:
要导入一个软件包只是为了它的副作用(初始化),请使用空白标识符作为显式的软件包名称。
更多信息请访问https://golang.org/ref/spec#Import_declarations
3pvhb19x2#
var _ = fmt.Printf
技巧在这里很有用。ldioqlga3#
我也有同样的问题。我理解为什么他们实现了禁止未使用的导入和变量的语言,但我个人在编写代码时觉得这个特性很烦人。为了解决这个问题,我改变了我的编译器,允许在代码中使用未使用的变量和导入的可选标志。
如果你感兴趣,你可以在https://github.com/dtnewman/modified_golang_compiler上看到这个。
现在,我可以简单地使用命令运行代码,比如gorun-gcflags '-unusedpkgs' test.go,它就不会抛出这些“unusedimport”错误。如果我省略这些标志,那么它将返回到不允许未使用的导入的默认值。
这样做只需要一些简单的改变。Go纯粹主义者可能不会对这些变化感到满意,因为有很好的理由不允许未使用的变量/导入,但我个人同意你的观点,这个问题使得在Go中编写代码变得不那么愉快,这就是为什么我对我的编译器进行了这些更改。
vtwuwzda4#
使用goimports。它基本上是
gofmt
的一个分支,由布拉德菲茨帕特里克编写,现在包含在go工具包中。您可以将编辑器配置为在保存文件时运行它。你再也不用担心这个问题了。lqfhib0f5#
使用
if false { ... }
注解掉一些代码。大括号内的代码必须在语法上正确,否则可能是无意义的代码。nr7wwzry6#
如果您在开发和测试时使用
fmt
包进行一般打印到控制台,那么您可能会在log包中找到更好的解决方案。luaexgnf7#
很多人已经提出了合理的理由,我也承认原作者的意图。然而,Rob Pike在不同的论坛上提到,Go是简化过程的结果,其他一些主流编程语言要么缺乏,要么不容易实现。这是Go语言的语义,也是为了使编译更快,有很多东西被采用,最初似乎效率低下。
简单地说,未使用的导入在Go中被认为是错误,因为它会破坏程序并减慢编译速度。使用import for side effect(_)是一种解决方法,但是,我发现有时候会混淆有效的导入与副作用沿着纯粹为了调试/测试而导入的副作用,特别是当代码库很大并且有可能忘记而不是无意中删除时,这可能会混淆其他工程师/评审员。我过去常常注解掉未使用的,然而,流行的IDE(如VS代码和Goland)可以轻松地使用
goimports
,它可以很好地插入和删除导入。更多信息请参考链接https://golang.org/doc/effective_go.html#blank_import58wvjzkj8#
把它放在你的文档的顶部,忘记未使用的导入:
y1aodyip9#
我刚刚做了一个新的Golang编译器,默认情况下它会忽略所有的
variable unused warning
和import unused warning
以及function unused warning
。https://github.com/yingshaoxo/go/releases/tag/v1.21
它适用于
go run
和go build