如何在 Go 中删除不需要的导入别名?

h0c*_*355 -2 go visual-studio-code goimports

我在网络https://github.com/deckarep/golang-set中发现了一个非常有用的 Go 库,它试图将 Python 集移植到 Go。

感谢 Visual Studio Code,我最终通过导入库import "github.com/deckarep/golang-set"并在代码中调用函数来使其正常工作:

mySet := mapset.NewSet()
Run Code Online (Sandbox Code Playgroud)

VS Code 自动识别别名并替换 import 指令:

import mapset "github.com/deckarep/golang-set"
Run Code Online (Sandbox Code Playgroud)

然而,作为一个发现这些别名令人困惑的人,我试图将其删除,但这样做后,VSCode 将其从 import 语句和我的代码中删除了。VS Code 然后告诉我:

未声明的名称:NewSet编译器(UndeclaredName)

NewSet(...)的包名称也是package mapset。所以我想我可以简单地删除它。但这不起作用。

我还尝试与其他第 3 方包类似地工作,并通过存储库的名称调用函数:

mySet := golang-set.NewSet()
Run Code Online (Sandbox Code Playgroud)

这也会导致错误。由于连字符的原因,这里不可能删除别名,或者我正在监督其他事情?

Fli*_*mzy 5

这里有几件事:

  1. mapset是包名。您可以通过查看包源代码来了解这一点。

  2. 虽然在这种情况下,从语言的角度来看,导入别名并不是严格需要的,但为了清楚起见,添加了它,因为包名称 ( mapset) 与导入路径 ( ) 不匹配golang-set。如果导入语句中没有别名,就无法知道如何引用包。这就是为什么它的存在很重要。

  3. 您不能用作golang-set导入名称,因为-导入别名中不允许使用该字符。但是,如果您确实愿意,您可以golang_set通过显式提供此别名作为别名来使用或类似:

    import golang_set "github.com/deckarep/golang-set"
    
    Run Code Online (Sandbox Code Playgroud)

    请注意,这违反了命名约定,因为包_名称中不应包含字符。但它应该仍然有效。

  4. 最佳实践是仅用作mapset别名。它是所有可用选项中最不容易混淆的(这就是它被自动选择的原因)。

  • 好的,但这不是一个误导性的别名。事实恰恰相反。添加它的明确目的是不产生误导。 (3认同)
  • @h0ch5tr4355 为什么?您想解决什么问题? (2认同)