7

我试图了解如何使用 go1.11 模块组织我的 golang 项目。我尝试了几种选择,但都没有奏效。

我在应用程序文件夹下的主包和主包使用的本地包中有一些代码。

$GOPATH
+ src
  + application/
    + main/
      + main.go
      + otherFileUnderMainPackage.go
    + aLocalPackage/
      + someCode.go
      + someCode_test.go
      + someMoreCode.go
      + someMoreCode_test.go

主包中的文件,导入../aLocalPackage. 当我编译时go build main/*.go它正在工作。

然后,我运行go mod init application: V.0.9.9并获取了 go.mod 文件,但构建总是失败。我总是收到关于找不到本地包的错误:build application:V0.9.9/main: cannot find module for path _/.../src/application/aLocalPackage. 我还尝试将本地包放在 src/ 下,将其放在 main/ 等下,但这些方法都不适合我。

模块和本地包的使用方法是什么?

谢谢。

4

3 回答 3

1

模块模式不支持相对导入路径。您将需要更新您的import语句以使用完整(绝对)导入路径。

您还应该选择除application. 您的模块路径通常应以您控制的 URL 前缀开头 - 您自己的域名或唯一路径,例如github.com/$USER/$REPO.

于 2019-07-30T19:31:26.803 回答
1

我写了一篇关于如何使用模块开始你的第一个 Go 项目的博文。

https://marcofranssen.nl/start-on-your-first-golang-project/

一般来说,它归结为只是在系统的某处创建一个新文件夹(不必在 GOPATH 中)。

mkdir my-project
cd my-project
go mod init github.com/you-user/my-project

这将创建 go.mod 文件。现在您可以简单地创建您的项目布局并开始构建您喜欢的任何内容。

也许我的其他博客之一可以激发您更多关于如何做事的灵感。

https://marcofranssen.nl/categories/software-development/golang/

于 2020-01-21T15:09:45.210 回答
0

我自己在使用本地软件包时遇到了一些问题。有两个技巧可以让它工作:

  1. 你在包目录中运行“go build”

这将编译包并将其放置在构建缓存中。这个关于代码组织的链接解释了更多。您可以确定缓存在哪里使用:

>go env GOCACHE
/home/<user>/.cache/go-build
  1. 使用相对于项目的路径导入

我对正确的导入路径感到困惑,最终发现go docgo list会告诉你。

>go doc
package docs // import "tools/src/hello/docs"
>go list
tools/src/hello/docs

例如。我有一个 hello world API 项目,并且正在使用swaggo生成它在docs子目录中执行的文档。要使用它,我添加了一个导入:

_ "tools/src/hello/docs"

对于我来说, _ 很重要,因为 docs 不是直接使用的,而是我们要调用它的 init() 函数。

现在hello/main.go我可以添加"tools/src/hello/docs",它将导入正确的包。

如果有的话,路径是相对于 go.mod 的位置的。我有工具/在这里,因为我有一个 go.mod 声明“模块工具”。

模块是一种不同的鱼 - 请参阅https://github.com/golang/go/wiki/Modules。最新版本的 go(1.11 和更高版本)可以创建一个go.mod文件,您可以使用该文件来修复所使用模块的版本,并避免 go 的疯狂默认行为,即只下载您导入的任何包的最新版本。

于 2019-11-07T17:31:02.887 回答