使用Golang fork版本进行go get操作的方法

使用Golang fork版本进行go get操作的方法 目前我正在扩展一个无人维护的 Go 语言数据库驱动(https://github.com/MonetDB/MonetDB-Go)。我已经复刻了该仓库,现在想在一个测试应用中对其进行测试。

我已在 main.go 中导入它,然后在 go.mod 中使用 replace 指令指向我的复刻版本: replace <old-repo>@latest => <new-repo> v1.0.0

然而,当我尝试执行 go get/go install/go run 时,总是收到相同的警告:

main.go:7:2: no required module provides package github.com/MonetDB/MonetDB-Go; to add it:
    go get github.com/MonetDB/MonetDB-Go

我知道无法直接 go get 一个复刻版本,所以我使用了 replace 指令。 是不是我在复刻版本的 go.mod 文件中做错了什么?


更多关于使用Golang fork版本进行go get操作的方法的实战教程也可以访问 https://www.itying.com/category-94-b0.html

2 回复

通常,你有两种方法:

  1. 在你的分支中,修改 go.mod 文件,将头部行更改为 <new repo>
  2. 你可以按以下方式使用 replace 指令:
go mod edit --replace <old repo> = <new repo>@latest`
go mod tidy

更多关于使用Golang fork版本进行go get操作的方法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在 Go 模块中使用 fork 版本的正确方法如下:

// go.mod 文件示例
module your-test-app

go 1.21

replace github.com/MonetDB/MonetDB-Go => github.com/your-username/MonetDB-Go v0.0.0

require github.com/MonetDB/MonetDB-Go v0.0.0

关键步骤:

  1. 确保 fork 仓库有正确的 go.mod 文件
// 在你的 fork 仓库中检查 go.mod
module github.com/your-username/MonetDB-Go

go 1.21
  1. 在测试项目中执行以下命令
# 初始化模块(如果尚未初始化)
go mod init your-test-app

# 添加原始模块依赖
go mod edit -require github.com/MonetDB/MonetDB-Go@v0.0.0

# 添加 replace 指令
go mod edit -replace github.com/MonetDB/MonetDB-Go=github.com/your-username/MonetDB-Go@latest

# 下载依赖
go mod tidy
  1. 如果仍然有问题,尝试清除模块缓存
go clean -modcache
rm go.sum
go mod tidy
  1. 检查你的 main.go 导入是否正确
package main

import (
    "fmt"
    "github.com/MonetDB/MonetDB-Go" // 保持原始导入路径
)

func main() {
    fmt.Println("Testing fork version")
}

replace 指令的工作原理是在本地将原始导入路径重定向到你的 fork 版本,但代码中仍需使用原始导入路径。确保你的 fork 仓库是公开可访问的,或者使用 SSH URL 格式:

replace github.com/MonetDB/MonetDB-Go => git@github.com:your-username/MonetDB-Go.git v0.0.0

执行 go mod tidy 后,Go 工具链会从你的 fork 仓库下载代码,同时保持导入路径不变。

回到顶部