猿问

从 go 中的同一项目导入包

我有一个关于 Go 中的包结构的问题。我的 src 目录中有一个结构如下的项目:


- project

    - proto_messages

    - client

        - clientcode.go

    - server

        - servercode.go

在我的客户端和服务器代码中,我使用这样的导入:“../proto_messages”,它构建在我的詹金斯上,没有任何问题。问题是,我无法像这样开发 - VS Code/Go 会出现以下错误:


unexpected directory layout:

    import path: _/C_/Users/bob/Documents/go/src/prj_temp/proto_messages

    root: C:\Users\bob\Documents\go\src

    dir: C:\Users\bob\Documents\go\src\prj_temp\proto_messages

    expand root: C:\Users\bob\Documents\go

    expand dir: C:\Users\bob\Documents\go\src\prj_temp\proto_messages

    separator: \


当我将 import 语句更改为“prj_temp/proto_messages”时,它可以在本地运行,但是 jenkins 构建失败,因为它找不到 proto_messages 包。有任何想法吗?


拉风的咖菲猫
浏览 119回答 1
1回答

至尊宝的传说

import 语句应该是 src 之后的路径,所以在这种情况下prj_temp/proto_messages是正确的。在 jenkins 上,确保将代码复制到正确的文件夹中:($GOPATH/src/prj_temp无论 jenkins 上的 gopath 是什么)此外,我建议将您的项目嵌套到组织级别目录中,以遵循约定。即使您不打算将其推送到 github 存储库,我也建议您将项目保留在本地C:\Users\bob\Documents\go\src\github.com\bob\someproject并将所有导入更改为github.com/bob/someproject/proto_messages. 我认为当您开始获取第三方项目时,事情会变得更容易。免责声明:答案基于我在 Go 模块发布之前获得的知识。当充分利用 go 模块时,上述某些内容可能不再是必要或推荐的。
随时随地看视频慕课网APP

相关分类

Go
我要回答