背景:项目环境配置(打开项目发现项目下的包自身找不到问题)
关于go的项目配置一共是两种情况第一种就是传统的方式:Gopath的方式(两种方式都可以,都有各自的优势)
注意:
开发中有个小的设置,那就是如果采用的是Gopath的方式传统方式,则必须将GO111MODULE设置为off:
E:\Develop\gowork\src\test>set GO111MODULE=off
相反,如果采用的是代理mod方式那么就采用GO111MODULE设置为on,否则无法创建mod文件,具体如下:
E:\Develop\gowork\src\test>go mod init
go mod init: modules disabled by GO111MODULE=off; see 'go help modules'
E:\Develop\gowork\src\test>set GO111MODULE=on
E:\Develop\gowork\src\test>go mod init
go: creating new go.mod: module test
一. 采用GOPATH方式:(优势包自动识别本地gopath的src下的包,可以使用本地包进行相关开发,同时go get 下载的包也会自动存放在src下;缺点就是下载速度慢,还可能下载不下来,同时不利于包版本的管理)
首先要关闭Modules的mod启动配置:(不要勾选)
然后就是在GOPATH配置中添加自己配置的GOPATH路径:(里面可以添加多个路径,系统会默认进行全部查找相关的依赖包)
最后就是关于依赖包没有的问题:
采用go get -d -v ./
具体的介绍如下:
https://wiki.jikexueyuan.com/project/go-command-tutorial/0.3.html
当以上全部执行完成,就可以直接使用go build。
二. 采用mod方式进行下载:(原理就是采用代理进行mod下载,同时会生成相关依赖的包管理文件,比较方面。优势:下载速度快,利于包的管理,会自动下载到GOPATH路径下的pkg下面;缺点:就是包采用的是代理方式,本地开发的私人包将无法使用,必须在代理网站可以搜索到的包才行。(针对这个缺陷已经找到解决方案,具体见第三种方案))
1. 下载go依赖包可能被网络封锁,下载不了,所以需要配置国内代理:
2. 项目中我发现之前使用的Beego框架可以正常的使用go工作目录,但是当我使用gin框架开发的时候发现问题,那就是已经有的包,显示找不到,会报错。
3. 尤其就是自己的项目包找不到的问题。
配置
ctrl+alt+s
->Go
->Go Modules(vgo)
->设置proxy
为https://goproxy.io/
->点击Apply
->重启GoLand即可或采用国内阿里的代理: GOPROXY=https://mirrors.aliyun.com/goproxy/
具体的Proxy,可以根据具体的需求进行相关的配置,可能有其他的代理服务。
2. 配置项目的环境:
如何出现背景中遇到的问题,那么就采用这种方式3个地方都进行相关的配置,然后Apply应用就可以了。
2. 如果发现上边的方式还是不行,那么就直接采用go mod 方式进行:
首先go mod init. (进行项目model的初始化)
然后go build (编译项目)
最后 bee run就可以运行。
三. 针对第二种mod方式进行改进(之前说的mod方式进行代理,但是本地包无法使用的情况进行解决)
步骤:
首先进行去人要代理的包假设为:logCollect
然后找到该包的具体绝对路径位置:E:\Go\Gopath\src\demoCode\logCollect
找到我们自己项目的mod.go文件添加如下代码:
require (
logCollect v0.0.0
)
replace logCollect => E:\Go\Gopath\src\demoCode\logCollect
最后使用和第二种方法一样的方式:
go mod init进行初始化依赖包。
最后就是检验: 发现项目的Modules中已经添加了本地包,表示已经成功。
特别注意: 最后的方式是一种综合使用方式,将会在未来开发中大规模使用,也方便团队内部合作开发使用自己公司内部的公共包。但是一定要切记,本地公共包需要先进行go mod init在公共保重产生go.mod
这样就可以直接指向本地依赖包。
以log4go公共包为例子,先进入包内,然后执行go mod init ....