我正在尝试理解如何使用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/等目录下,但这些方法对我都不起作用。
使用模块和本地包的方式是什么?
谢谢。
发布于 2019-07-31 03:31:27
模块模式不支持相对导入路径。您需要更新import语句以使用完整(绝对)导入路径。
您还应该选择application以外的模块名称。您的模块路径通常应该以您控制的URL前缀开头-要么是您自己的域名,要么是一个唯一的路径,比如github.com/$USER/$REPO。
发布于 2020-01-21 23:09:45
我写了一篇关于如何使用模块开始你的第一个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/
发布于 2019-11-08 01:31:03
我自己在使用本地包时遇到了一些问题。有两个技巧可以让它工作:
构建在软件包目录中运行"go
这将编译包并将其放在构建缓存中。这个关于code organisation in go的链接解释了更多。您可以确定缓存使用的位置:
>go env GOCACHE
/home/<user>/.cache/go-build使用相对于项目的路径导入
我对正确的导入路径感到困惑,最后发现go doc或go 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的位置的。我这里有tools/,因为我有一个声明“go.mod tools”的模块。
模块是另一回事--参见https://github.com/golang/go/wiki/Modules。go的最新版本(1.11和更高版本)可以创建一个go.mod文件,你可以用它来修复所用模块的版本,并避免go疯狂的默认行为,即只下载你导入的任何包的最新版本。
https://stackoverflow.com/questions/52296086
复制相似问题