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

aurhwmvo  于 2023-05-04  发布在  Go
关注(0)|答案(9)|浏览(142)

默认情况下,Go将未使用的导入视为错误,强制您删除导入。我想知道是否存在改变这种行为的希望。减少到警告。
我发现这个问题非常烦人,阻止我享受在Go中编码。
例如,我正在测试一些代码,禁用一个段/函数。库中的某些函数不再使用(例如fmt,错误,无论什么),但我需要在一个小测试后重新启用该函数。现在,除非我删除这些导入,否则程序将无法编译,几分钟后,我需要重新导入库。
在开发GAE程序时,我一次又一次地执行这个过程。

gojuced7

gojuced71#

在包名前添加下划线(_)将忽略未使用的导入错误。
下面是一个如何使用它的示例:

import (
    "log"
    "database/sql"

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

要导入一个软件包只是为了它的副作用(初始化),请使用空白标识符作为显式的软件包名称。
更多信息请访问https://golang.org/ref/spec#Import_declarations

3pvhb19x

3pvhb19x2#

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

ldioqlga

ldioqlga3#

我也有同样的问题。我理解为什么他们实现了禁止未使用的导入和变量的语言,但我个人在编写代码时觉得这个特性很烦人。为了解决这个问题,我改变了我的编译器,允许在代码中使用未使用的变量和导入的可选标志。
如果你感兴趣,你可以在https://github.com/dtnewman/modified_golang_compiler上看到这个。
现在,我可以简单地使用命令运行代码,比如gorun-gcflags '-unusedpkgs' test.go,它就不会抛出这些“unusedimport”错误。如果我省略这些标志,那么它将返回到不允许未使用的导入的默认值。
这样做只需要一些简单的改变。Go纯粹主义者可能不会对这些变化感到满意,因为有很好的理由不允许未使用的变量/导入,但我个人同意你的观点,这个问题使得在Go中编写代码变得不那么愉快,这就是为什么我对我的编译器进行了这些更改。

vtwuwzda

vtwuwzda4#

使用goimports。它基本上是gofmt的一个分支,由布拉德菲茨帕特里克编写,现在包含在go工具包中。您可以将编辑器配置为在保存文件时运行它。你再也不用担心这个问题了。

lqfhib0f

lqfhib0f5#

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

nr7wwzry

nr7wwzry6#

如果您在开发和测试时使用fmt包进行一般打印到控制台,那么您可能会在log包中找到更好的解决方案。

luaexgnf

luaexgnf7#

很多人已经提出了合理的理由,我也承认原作者的意图。然而,Rob Pike在不同的论坛上提到,Go是简化过程的结果,其他一些主流编程语言要么缺乏,要么不容易实现。这是Go语言的语义,也是为了使编译更快,有很多东西被采用,最初似乎效率低下。
简单地说,未使用的导入在Go中被认为是错误,因为它会破坏程序并减慢编译速度。使用import for side effect(_)是一种解决方法,但是,我发现有时候会混淆有效的导入与副作用沿着纯粹为了调试/测试而导入的副作用,特别是当代码库很大并且有可能忘记而不是无意中删除时,这可能会混淆其他工程师/评审员。我过去常常注解掉未使用的,然而,流行的IDE(如VS代码和Goland)可以轻松地使用goimports,它可以很好地插入和删除导入。更多信息请参考链接https://golang.org/doc/effective_go.html#blank_import

58wvjzkj

58wvjzkj8#

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

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

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

y1aodyip9#

我刚刚做了一个新的Golang编译器,默认情况下它会忽略所有的variable unused warningimport unused warning以及function unused warning
https://github.com/yingshaoxo/go/releases/tag/v1.21
它适用于go rungo build

相关问题