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

1 回复

更多关于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
└── ...

具体操作步骤:

  1. 在客户端模块目录中编辑 go.mod 文件
  2. 添加 replace 指令指向本地 SDK 路径
  3. 运行 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 下载。这种方法在开发阶段非常实用,可以实时测试本地修改而无需频繁发布版本。

回到顶部