似乎从1.11开始使用模块的方式已更改,我正在尝试了解如何从另一个目录引用模块/包。
让我说我有一个文件夹结构 \ root \ module1 \ root \ module2
我在每个目录中都有一个go.mod,我可以从\ root目录访问/使用这些模块
如何从module1访问module2。这些模块不会在任何地方发布(也不希望它们被发布)-我只想访问它们。模块2包含我需要在mondule1中使用的类型/结构
亲切问候 马丁
答案 0 :(得分:1)
Go模块必须放在GOPATH中才能使用。
当我开始一个新的go项目时,通常会在gopath中创建一个文件夹
cd $GOPATH
ls
在这里找到3个文件夹
bin pkg src
ls src
>code.cloudfoundry.org github.com github.ibm.com golang.org gopkg.in go.uber.org honnef.co winterdrache.de
在src中,有一些您使用“ go get”命令检索的代码。
这里的所有内容都可以导入(/导出)到您的软件中。
假设此测试项目:
github.ibm.com/
└── Alessio-Savi
└── GoLog-Viewer
├── conf
│ ├── dev.json
│ └── test.json
├── database
│ ├── cloudant
│ │ └── cloudant.go
│ └── db2
│ └── db2.go
├── datastructure
│ └── datastructures.go
├── GinProva.go
├── README.md
├── request
│ └── request.go
└── resources
└── template01.html
注意:数据结构保存在go文件中的正确目录中,以避免导入圈子
您可以使用以下导入语句导入datastructures.go(或所需的其他文件)
package mypackage
import(
"github.ibm.com/Alessio-Savi/GoLog-Viewer/datastructure"
)
在其他文件中(与其他项目在同一项目中),您只需使用该软件包并让IDE帮助您(由于该模块/项目位于GOPATH中)
要创建新模块,可以使用新的go module init
gotool命令。
在公开源代码的情况下,创建新模块的常见方法是:
go mod init github.com/username/modulename
这将生成两个文件:
go.mod
文件将包含运行模块所需的每个库/外部golang代码。
go.sum
文件将包含库的哈希。
例如,我将使用名为GoGPUtils
的小型通用库。
mkdir GoGPUtils
cd $_
go mod init github.com/alessiosavi/GoGPUtils
现在,您可以在go.mod
库中的代码中插入所需的库。假设您需要ahocorasick
实现才能进行字符串搜索,go.mod
文件将包含以下内容:
module github.com/alessiosavi/GoGPUtils
go 1.13
require (
github.com/alessiosavi/ahocorasick v0.0.3
golang.org/x/tools v0.0.0-20191031220737-6d8f1af9ccc0 // indirect
)
在require
部分中,列出了所需的软件包。现在,您可以在代码中导入ahocorasick
库,如下所示:
import (
ahocorasick "github.com/alessiosavi/ahocorasick"
)