【问题标题】:Using local packages with gb将本地包与 gb 一起使用
【发布时间】:2017-02-26 20:18:49
【问题描述】:

我正在开始一个新项目并考虑将gb 作为我的构建工具,但它似乎与vscode 集成得不太好...

我已经使用gb vendor fetch 引用了第 3 方依赖项,但至于创建本地包,这证明有点棘手!我错过了什么明显的东西吗?

这是我的本地 src 目录:

src
    /cmd
        /model
            calc.go
        /server
            server.go

下面的代码编译成功,创建了bin\server.exe文件,但是导入路径没有拾取,gocode也识别不到

这是服务器代码:

package main

import (
    "cmd/model" // not a happy reference...
    "fmt"
)

func main() {
    fmt.Println(model.Add(1, 2))
}

这是模型代码:

package model

func Add(a int, b int) int {
    return a + b
}

我在 Github (https://github.com/joefitzgerald/go-plus/issues/325) 上发现了类似的问题,虽然 nsf 的解决方案可以自动完成(导入后),但导入语句本身仍然声称在 GOROOT 和 GOPATH 中搜索。

有什么想法吗?

【问题讨论】:

    标签: go


    【解决方案1】:

    感谢 lukehoban 在这里https://github.com/Microsoft/vscode-go/issues/249 的回答,我能够让我的环境正常工作。

    我只是在 .vscode 目录(现在必须签入)下创建了一个 settings.json 文件,我已将其配置到该目录中:

    {
        "go.gopath": "${workspaceRoot}"
    }
    

    这让我觉得不干净,而且它仍然没有提供同时引用 3rd 方依赖项和本地包的方法...

    【讨论】:

      【解决方案2】:

      不要试图与 Go 对抗,而是与 Go 一起工作。

      首先,为您的所有包提供完全限定的导入路径。 Go 是围绕全局导入路径设计的,不要试图强制 Go 使用扁平层次结构甚至相对路径。

      您可以直接或使用 Go 的 remote import path 机制指向您的导入路径存储库端点。顺便说一句,如果您碰巧运行自托管 GitLab 实例,它支持开箱即用的远程导入路径元标记。

      我更喜欢glide,但也许以下内容也可以使用 gb。当然,即将推出的go dep 也有类似的可能:您可以使用 glide 的repo stanza 指向 ssh+git 端点和其他端点。坦率地说,我不知道 gb 是否支持等效机制,但如果不支持,这是一个重新考虑的好理由。

      【讨论】:

      • GB 将每个项目都视为自己的 GOPATH,所以我通常不会这样做!我最终实现了 govendor,它运行良好。我也在等待 dep,官方将是对目前可用的过多解决方案的一个很好的改变......
      猜你喜欢
      • 2014-10-03
      • 2020-08-22
      • 2014-11-21
      • 1970-01-01
      • 2015-05-31
      • 2017-12-11
      • 2020-09-01
      • 2019-03-10
      • 1970-01-01
      相关资源
      最近更新 更多