如何禁用Golang未使用的导入错误

时间:2013-10-24 08:05:18

标签: go

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

我发现这个问题非常烦人,阻止我在Go中享受编码。 例如,我正在测试一些代码,禁用段/功能。不再使用lib中的某些函数(例如fmt,errors等),但我需要在稍微测试后重新启用该函数。现在程序将无法编译,除非我删除这些导入。几分钟后,我需要重新导入lib。

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

8 个答案:

答案 0 :(得分:26)

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

以下是如何使用它的示例:

import (
    "log"
    "database/sql"

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

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

https://golang.org/ref/spec#Import_declarations

查看详情

答案 1 :(得分:23)

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

答案 2 :(得分:19)

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

如果您有兴趣,可以在https://github.com/dtnewman/modified_golang_compiler看到。

现在,我可以使用 go run -gcflags' -unused_pkgs'等命令运行代码。 test.go 并且它不会抛出这些"未使用的导入"错误。如果我遗漏这些标志,那么它将返回默认值,不允许未使用的导入。

这样做只需要进行一些简单的更改。纯粹主义者可能不会对这些变化感到满意,因为有充分的理由不允许使用未使用的变量/导入,但我个人同意你的看法,这个问题使得在Go中编码变得不那么愉快,这就是为什么我对这些更改进行了改动。编译器。

答案 3 :(得分:15)

使用goimports。它基本上是gofmt的一个分支,由Brad Fitzpatrick编写,现在包含在go工具包中。您可以将编辑器配置为在保存文件时运行它。你永远不必再担心这个问题了。

答案 4 :(得分:5)

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

答案 5 :(得分:4)

使用if false { ... } 注释掉部分代码。大括号内的代码必须在语法上正确,否则可能是无意义的代码。

答案 6 :(得分:2)

许多人已经以合理的理由发表了评论,我也承认原作者的意图。但是,Rob Pike在不同的论坛中提到,Go是简化其他少数主流编程语言所缺少或不容易实现的过程的结果。这是Go的语言语义,也是为了加快编译速度,因此采用了许多最初看起来效率低下的东西。

为了简短起见,未使用的导入被认为是Go中的错误,因为它会使程序受污并降低编译速度。使用副作用(_)的导入是一种解决方法,但是,当混合了有效导入和副作用以及纯粹出于调试/测试目的而导入的副作用时,尤其是在代码库为很大,有机会忘记而不是无意删除,这以后可能会使其他工程师/审阅者感到困惑。我曾经将未使用的注释掉,但是,流行的IDE(例如VS代码和Goland)可以轻松使用goimports,这可以很好地插入和删除导入。请参考链接以获取更多信息,https://golang.org/doc/effective_go.html#blank_import

答案 7 :(得分:-2)

将其放在您的文档之上,忘记未使用的导入:

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

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