【问题标题】:Go local module import can't be resolved by IDE linterIDE linter 无法解析 Go 本地模块导入
【发布时间】:2020-07-06 12:05:33
【问题描述】:

代码编译得很好,但是当使用 replace 指令将包名映射到本地目录时,Go linter 无法拾取。

我在 VSCode 和 Goland 上都试过这个,两者都有如下所示的 lint 错误。图片是额外信息,所有代码和错误信息都以文本格式显示在下面。

存储库:https://github.com/webberwang/go-lint-error

这是文件夹结构:

/core
  /calc
    math.go
  go.mod
/main
  app.go
  go.mod
// main/app.go

package main

import (
    "fmt"
    "github.com/codelabstudios/core/calc" <- ERROR "Cannot resolve directory 'core'"
)

func main() {
    result := calc.Add(1, 2) <- ERROR "Unresolved reference 'Add'"
    fmt.Println("calc.Add(1, 2) => ", result)
}
// main/go.mod

module github.com/codelabstudios/main

go 1.14

require github.com/codelabstudios/core v0.0.0-00010101000000-000000000000

replace github.com/codelabstudios/core => ../core
// core/calc/math.go

package main

import (
    "fmt"
    "github.com/codelabstudios/core/calc"
)

func main() {
    result := calc.Add(1, 2)
    fmt.Println("calc.Add(1, 2) => ", result)
}
// core/calc/go.mod

module github.com/codelabstudios/core

go 1.14

【问题讨论】:

  • 您的文件夹结构毫无意义,与您的模块和包不匹配。阅读如何编写 Go 代码并坚持下去。
  • @Volker 我有 2 个模块“core”和“main”,树结构与“go.mod”文件位置有点不同,我更新了它。存储库会给你一个更好的主意。我将模块放在 $GOPATH 之外,因为这种方法限制性太大。
  • 首先go.mod 应该在项目级别,即coremain 级别。其次,我没有看到github.com/codelabstudios/core/calc 的任何存储库。您是否尝试导入您自己的Add 函数core pkg https://github.com/webberwang/go-lint-error/blob/master/core/calc/math.go#L3
  • @TanveerAlam coremain 是模块,项目级别只打开这些模块。该仓库不存在,因为我正在使用本地模块导入

标签: go visual-studio-code lint goland golint


【解决方案1】:

经过一番挖掘,我发现“替换”指令是 Vgo 提案的一部分(V 代表版本控制)。这在 1.11 中与 Go 合并。

要修复本地模块导入错误,我们只需要在IDE中启用“Vgo集成”即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-18
    • 2021-12-29
    • 2015-09-05
    • 2014-05-27
    • 1970-01-01
    相关资源
    最近更新 更多