首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >golang模块和本地包

golang模块和本地包
EN

Stack Overflow用户
提问于 2018-09-12 21:12:46
回答 3查看 3.6K关注 0票数 7

我正在尝试理解如何使用go1.11模块来组织我的golang项目。我尝试了几种方法,但都不起作用。

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

代码语言:javascript
复制
$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/等目录下,但这些方法对我都不起作用。

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

谢谢。

EN

回答 3

Stack Overflow用户

发布于 2019-07-31 03:31:27

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

您还应该选择application以外的模块名称。您的模块路径通常应该以您控制的URL前缀开头-要么是您自己的域名,要么是一个唯一的路径,比如github.com/$USER/$REPO

票数 1
EN

Stack Overflow用户

发布于 2020-01-21 23:09:45

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

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

一般来说,归根结底就是在系统中的某个地方创建一个新文件夹(不一定要在GOPATH中)。

代码语言:javascript
复制
mkdir my-project
cd my-project
go mod init github.com/you-user/my-project

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

也许我的其他博客可以给你更多关于如何做事情的灵感。

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

票数 1
EN

Stack Overflow用户

发布于 2019-11-08 01:31:03

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

构建在软件包目录中运行"go

这将编译包并将其放在构建缓存中。这个关于code organisation in go的链接解释了更多。您可以确定缓存使用的位置:

代码语言:javascript
复制
>go env GOCACHE
/home/<user>/.cache/go-build

使用相对于项目的路径导入

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

代码语言:javascript
复制
>go doc
package docs // import "tools/src/hello/docs"
>go list
tools/src/hello/docs

例如。我有一个hello world API项目,并使用swaggodocs子目录中生成文档。为了使用它,我添加了一个导入:

代码语言:javascript
复制
_ "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疯狂的默认行为,即只下载你导入的任何包的最新版本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52296086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档