目录

大概就是:

说一下我的案例

下面开始引入主题:如果利用replace替换包

先解释下go mod 的 replace 关键字是怎么使用的

为什么需要 replace?

replace怎么用?

参数说明:


大概就是:

1、我遇到了 go get 不到包的情况

2、需要用 go.mod 的 replace 来解决因为go get 不了远程包,然后需要下载远程包,如果远程包有go.mod,那你就只能再通过 replact来引入远程包的问题。(重点,主题)

说一下我的案例

我需要下载腾讯tpns的go sdk包 

地址:https://cloud.tencent.com/document/product/548/58319 选择go就会进入下图页面

go mod 报错 no Go source files_go

然后我尝试使用 go get 去下载

go get git.code.tencent.com/tpns/tpns-server-sdk/gosdk

go mod 报错 no Go source files_包名_02

结果报错,那我就去下载sdk包文件到我本地,我直接本地使用总可以了吧?

下载后的样子是这样的,一个文件gosdk,然后里面有各种文件。如下图:

go mod 报错 no Go source files_go_03

然后我把它放在我项目中的pkg(一般包我都会放这里)

go mod 报错 no Go source files_参数说明_04

他也没有报错,也可以调用。

go mod 报错 no Go source files_包名_05

但是当我bee run 或者 go run 的时候,就提示报错了

go mod 报错 no Go source files_包名_06

报错的意思就是找不到这个下载下来的gosdk包

因为它里面有一个mod文件, 一般是不能mod包引入另一个mod包的,只能通过go.mod文件中replace来做引入

下面开始引入主题:如果利用replace替换包

我看到我下载的远程包里面有个go.mod文件写着包名:git.code.tencent.com/tpns/tpns-server-sdk/gosdk

go mod 报错 no Go source files_go_07

所以我首先去我的本地go mod 目录中,创建以下路径,然后把gosdk包移动进去,如下图:

go mod 报错 no Go source files_包名_08

先解释下go mod 的 replace 关键字是怎么使用的

为什么需要 replace?

答案:手动添加go get 不出来的地址

replace怎么用?

1、需要下载你go get 的那个包到本地

2、再移动到全局go mod 的下载目录中,我的全局mod目录是/Users/twj/Documents/go_www/pkg/mod

3、然后再通过你项目中的go.mod使用replace参数来做引入。(如果你下载的远程包里面没有go.mod,那你可以直接移动到你项目目录中使用了,不需要replace,我后面的案例是因为我下载的远程包有go.mod)

参数说明:

replace (require 中的地址,你可以随便写,但是要和require的一致] => [新地址,也就是你放在本地目录的包)

然后去我的项目的go.mod中

go mod 报错 no Go source files_参数说明_09

 

然后就可以使用了

go mod 报错 no Go source files_包名_10

go mod 报错 no Go source files_包名_11

go mod 报错 no Go source files_参数说明_12

另外你也可以把外部包放在你的项目内,这样你就要更改replace,

放项目内也有好处,就是你以后如果要迁移项目给别人,就可以项目+包一起带走了,不然你还要去看引用了什么包,再找到mod,不是很好 

go mod 报错 no Go source files_参数说明_13