Golang模块 - 如何使用已检出的代码
Golang模块 - 如何使用已检出的代码 我的团队正在开发两个模块 - SDK 和 “客户端”。 “客户端” 模块使用 SDK。这些模块目前完全处于开发阶段,我们将在几个月后才对外公开。
由于我需要使用 github.com/hashicorp/terraform v0.11.14,我正在将它们转换为 “Go 模块”。 在客户端模块中,当我执行 “go mod init” 时,我看到:
require (
github.com/repo/sdk-name v0.0.0-<hash>
github.com/hashicorp/terraform v0.11.14
)
由于我仍处于开发阶段且没有实际使用者,我只想使用当前已检出的 SDK 模块,这样 SDK 就只是本地存储在 src/github.com/… 中,但当我执行 “go build” 时,它仍然从实际的 github.com 获取。
目前,所有内容都在 $GOPATH/src/… 目录下,我只是将 github.com/hashicorp/terraform 检出到 v0.11.14 版本。
有没有更好的方法来实现这个需求?
更多关于Golang模块 - 如何使用已检出的代码的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于Golang模块 - 如何使用已检出的代码的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在 Go 模块开发阶段,你可以使用 replace 指令来使用本地检出的 SDK 代码,而不是从远程仓库获取。这可以通过修改 go.mod 文件来实现。
在你的客户端模块的 go.mod 文件中,添加 replace 指令指向本地 SDK 路径:
module your-client-module
go 1.21
require (
github.com/repo/sdk-name v0.0.0-20231201000000-abcdef123456
github.com/hashicorp/terraform v0.11.14
)
replace github.com/repo/sdk-name => /path/to/your/local/sdk
示例目录结构:
/path/to/your/local/sdk/
├── go.mod
├── sdk.go
└── ...
/your/client/module/
├── go.mod
├── main.go
└── ...
具体操作步骤:
- 在客户端模块目录中编辑
go.mod文件 - 添加
replace指令指向本地 SDK 路径 - 运行
go mod tidy确保依赖关系正确
示例 go.mod 文件:
module client
go 1.21
require (
github.com/repo/sdk-name v0.0.0-20231201000000-abcdef123456
github.com/hashicorp/terraform v0.11.14
)
replace github.com/repo/sdk-name => ../sdk
如果你的 SDK 和客户端在同一父目录下:
workspace/
├── sdk/
│ ├── go.mod
│ └── sdk.go
└── client/
├── go.mod
└── main.go
那么 replace 指令可以是:
replace github.com/repo/sdk-name => ../sdk
这样当你执行 go build 时,Go 工具链会使用本地 SDK 代码而不是从 GitHub 下载。这种方法在开发阶段非常实用,可以实时测试本地修改而无需频繁发布版本。

