How to disable Golang unused import error

默认情况下,Go 将未使用的导入视为错误,强制您删除导入。 我想知道是否存在改变这种行为的希望,例如,将其减少到警告。

我发现这个问题非常烦人,使我无法享受在 Go 中编写代码的乐趣。

例如,我正在测试一些代码,禁用一个段/函数。库中的某些函数不再使用(例如 fmt、错误等等) ,但是我需要在稍微测试之后重新启用该函数。现在,除非我删除这些导入,否则程序不会编译,几分钟后,我需要重新导入 lib。

在开发 GAE 程序时,我一次又一次地做这个过程。

38439 次浏览

如果您在开发和测试时使用 fmt软件包进行一般打印,那么您可以在 木头软件包中找到更好的解决方案。

var _ = fmt.Printf的技巧在这里很有用。

使用 进口货。它基本上是由布莱德·菲兹派翠克编写的 gofmt的分支,现在包含在 go 工具包中。您可以将编辑器配置为在保存文件时运行它。你再也不用担心这个问题了。

我也有同样的问题。我理解他们为什么实现这种语言来禁止未使用的导入和变量,但是我个人觉得在编写代码时这个特性很烦人。为了解决这个问题,我改变了编译器,允许在代码中使用可选的标志来允许未使用的变量和导入。

如果你感兴趣,你可以在 https://github.com/dtnewman/modified_golang_compiler看到这一点。

现在,我可以简单地使用诸如 Go run-gcFlag’-used _ pkgs’test.go之类的命令运行代码,它不会抛出这些“未使用的导入”错误。如果我省略了这些标志,那么它将返回默认值,即不允许未使用的导入。

Doing this only required a few simple changes. Go purists will probably not be happy with these changes since there is good reason to not allow unused variables/imports, but I personally agree with you that this issue makes it much less enjoyable to code in Go which is why I made these changes to my compiler.

把它放在文档的顶部,忘掉未使用的导入:

import (
"bufio"
"fmt"
"os"
"path/filepath"
)


var _, _, _, _ = fmt.Println, bufio.NewReader, os.Open, filepath.IsAbs

使用 if false { ... }发表评论一些代码。大括号中的代码必须在语法上正确,否则可能是无意义的代码。

在包名之前添加下划线(_)将忽略未使用的导入错误。

下面是一个你如何使用它的例子:

import (
"log"
"database/sql"


_ "github.com/go-sql-driver/mysql"
)

若要仅为副作用(初始化)导入包,请使用 空白标识符作为显式包名称。

详情请浏览 https://golang.org/ref/spec#Import_declarations

很多人已经有了合理的解释,我也承认原作者的意图。然而,Rob Pike 在不同的论坛中提到,Go 是一些其他主流编程语言缺乏或不容易实现的过程简化的结果。这是 Go 的语言语义,也是为了让编译速度更快,有很多东西被采用了,最初看起来效率很低。

简而言之,Go 中未使用的导入被认为是错误,因为它会阻塞程序并减慢编译速度。使用导入作为副作用(_)是一个解决方案,然而,当纯粹为了调试/测试而导入的有效导入和副作用混杂在一起时,我发现这有时会令人困惑,特别是当代码库很大并且有机会忘记和不无意中删除的时候,这可能会让其他工程师/审核人员感到困惑。我过去常常把没用过的注释掉,但是像 VS 代码和 Goland 这样流行的 IDE 可以很容易地使用 goimports,它可以很好地插入和删除导入。请参考链接了解更多信息,https://golang.org/doc/effective_go.html#blank_import