Go module初探

     go的依赖问题一直是老大难的问题,所以花点时间总结下,避免下次又花费太多的时间在这个上面。

 

一、Goland一直显示依赖为红色

  1.11版本的go之后,大多推荐以go.mod进行包的管理,所以这里仅仅以go.mod为例进行解决。

    第一步:go版本,必须是>= v1.11,本人使用的版本是1.15。

    第二步:go env GO111MODULE以查看以否开启。

        确保模式为on,设置方式为:   
        go env -w GO111MODULE=on

                 小知识:

没有GO111MODULE时,go编译程序的查找依赖的顺序gopath > goroot ,

有了GO111MODULE后,会读取当前项目的go.mod.文件,在go.mod文件

中会记录有哪些依赖。要使用go module 首先要设置GO111MODULE=on,

GO111MODULE 有三个值,off、on、auto,off 和 on 即关闭和开启,auto 则

会根据当前目录下是否有 go.mod 文件来判断是否使用 modules功能。无论

使用哪种模式,module功能默认不在GOPATH目录下查找依赖文件,所以使

用modules功能时请设置好代理。

        第三步:配置代理

               如果需要下载依赖包,需要配置代理。

              代理一:https://goproxy.io

              代理二:https://athens.azurefd.net

            代理三:https://mirrors.aliyun.com/goproxy/

            Ping一下,选择一个速度快的进行代理配置。具体方法为:

           go env -w GOPROXY=https://goproxy.io

            也可以通过goland进行配置

             

 

 

           

   第四步:下载依赖

go mod tidy

   经过以上几步,解决中间的所有错误(如果遇到),应该就能将红色消灭。我在曾经在goland19.2上奋战很久,后来goland换成20.1后,依赖解决。所以打死我也用goland19.2.

小知识:

go module默认不在GOPATH目录下查找依赖文件,其首先会在GOPATH/pkg/mod中查 找有没有所需要的依赖,没有的直接会进行下载。

go mod down load下载好所需要的依赖,依赖默认会下载到GOPATH/pkg/mod中,其他项目也会使用缓存的module。

go get ./… 下载依赖包到GOPATH/pkg/mod

go mod tidy 依赖关系处理 ,根据go.mod文件,添加需要用到但go.mod中查不到的模块, 删除未使用的模块。也会下载包,所以有人说他是万能的。

go mod vendor指令,将依赖包从$GOPATH/pkg/mod目录拷贝至当前项目目录下的vendor目录

1.6版本的go查找依赖包路径如下:

当前包下的vendor目录。

向上级目录查找,直到找到src下的vendor目录。

在GOPATH下面查找依赖包。

在GOROOT目录下查找

 

二、自己刚建立的项目

1、对于刚建立的项目没有mod.go

   go mod init

   生成了mod.go

   然后进行go run main.go进行包的下载和维护

 

三、go module管理

   配置GOPATH可以方便找到软件源码,可以配置多个地址,比如:export GOPATH=/work1:/work2

  一个标准的go的工程包含bin、pkg、src其中src是源码,bin和pkg不需要创建,在构建的过程中会自动创建这些目录。

   

posted on 2021-01-16 19:33  星星眨着眼  阅读(120)  评论(0编辑  收藏  举报

导航