在 Golang 项目使用 GitHub fork 出来的项目(go mod 的 replace)

news/2025/1/11 4:20:48/

今天从 GitHub 克隆了一个别人的 Golang Markdown 项目,作了些修改,想使用自己的版本,发现不行,因为模块的路径不对,导致导入出错。

原来的模块路径和文件(go.mod):

  • github.com/yuin/goldmark

    module github.com/yuin/goldmarkgo 1.13
    

克隆后的模块路径和文件:

  • github.com/movsb/goldmark

    module github.com/yuin/goldmarkgo 1.13
    

只是路径变了,go.mod 里面的内容是不变的。

同样,代码里面使用的当前项目的子模块的引用路径肯定也没变。这样一定会导致各种引用混乱。所以当前 Go 语言为什么没有引入导入相对路径的模块?🤔

尝试在测试项目里面使用我自己的克隆版本:

package mainimport "github.com/movsb/goldmark"func main() {goldmark.New()
}

发现会报错:

$ go run main.go 
go: github.com/movsb/goldmark: github.com/movsb/goldmark@v1.1.30: parsing go.mod:module declares its path as: github.com/yuin/goldmarkbut was required as: github.com/movsb/goldmark

所以,怎么办?不可能把人家的路径全部给改了吧?

突然想到了 replace 指令。

以前为了引入一个在本地正在开发的模块,经常 replace 路径为本地路径:

replace github.com/movsb/taorm => /Users/tao/code/taorm

实际上 replace 也可以用来替换掉非本地的模块路径。

代码里面导入原来的仓库路径:

package mainimport "github.com/yuin/goldmark"func main() {goldmark.New()
}

go.mod 里面 replace 掉。require 原来的,replace 成自己的:

module github.com/movsb/testrequire github.com/yuin/goldmark v1.1.30replace github.com/yuin/goldmark => github.com/movsb/goldmark v1.1.30go 1.13

如果要更新版本,可以把 v1.1.30 换成新版本,或者 git 的提交号(commit-id),然后在终端执行:

go mod download github.com/movsb/goldmark@版本号或提交号

注意前端的版本号是用空格分开的,命令中的版本号是用@分开的。

参考:

  • When should I use the replace directive?
  • go modules的replace使用, 解决fork的项目import问题

原文地址:


http://www.ppmy.cn/news/809588.html

相关文章

GO的lua虚拟机 gopher-lua

https://github.com/yuin/gopher-luahttps://github.com/yuin/gopher-lua Lua 5.1 Reference Manual - contentshttp://www.lua.org/manual/5.1/ Extending Lua with Go types – Marin Atanasov Nikolov – A place about Open Source Software, Operating Systems and some …

Golang lua交互——gopher-lua中call函数使用

gopher-lua github: https://github.com/yuin/gopher-lua 这是目前github中最受欢迎的一个用于golang和lua交互的开源库,在做项目时需要用到其中的call函数,由于与c的lua_call有些区别,因此在这里介绍一下call函数的用法 golang和lua交互的…

【Go-Lua】Golang嵌入Lua代码——gopher-lua

Lua代码嵌入Golang Go版本:1.19 首先是Go语言直接调用Lua程序,并打印,把环境跑通 package mainimport lua "github.com/yuin/gopher-lua"func main() {L : lua.NewState()defer L.Close()// goerr : L.DoString(print("go g…

浅谈如何使用 github.com/yuin/gopher-lua

1、 gopher-lua 基础介绍 我们先开看看官方是如何介绍自己的: GopherLua is a Lua5.1( goto statement in Lua5.2) VM and compiler written in Go. GopherLua has a same goal with Lua: Be a scripting language with extensible semantics . It provides Go AP…

Go分享好的github插件和项目

插件 QQ、微信(WeChat)、支付宝(AliPay)的Go版本SDK http://github.com/go-pay/gopay发送邮件库 https://github.com/go-gomail/gomail读写Microsoft Excel https://github.com/360EntSecGroup-Skylar/excelize生成uuid https://…

前后端分离项目问题总结

这里记录一下,我在写一个自己设计的项目时遇到的几个问题!!! 1、Session获取为null 需求:session保存验证码,在session中验证验证码是否正确 解释: 前端跨域访问后端接口, 在浏览器的安全策略…

申请和注销设备号的方法

一、Linux内核对设备的分类 linux的文件种类: -:普通文件 d:目录文件 p:管道文件 s:本地socket文件 l:链接文件 c:字符设备 b:块设备 Linux内核按驱动程序实现模型框架的不…

S3C2440 ARM920T CPU

S3C2440 ARM920T CPU 支持大端/小端模式。共同有8个存储器BANK,每个BANK为128M。BANK0~BANK6为固定起始地址。BANK7可编程BANK起始地址和大小,其开始地址是BANK6的结束地址,灵活可变。BANK0~BANK5用于ROM或者SRAM,BANK6、BANK7用…