Starguard
开发笔记
Toggle navigation
Starguard
全部笔记
Unity
大话存储笔记
C语言
MongoDB
About Me
归档
标签
Go的包管理及Goland中的配置
2021-09-06 12:31:41
95
0
0
admin
【前言】 Go的工程可以放在两种位置: * 一种是在GOPATH环境变量目录中 * 一种是在GOPATH环境变量目录外,使用go mod命令进行包管理 一些小伙伴可能长时间使用一种方法,遇到一个新的项目使用了另一种方法,就会不太熟悉,且不熟悉Goland提供了哪些支持,这篇文章介绍两种方法以及在Goland中的相应配置。 【使用GOPATH】 1、配置全局GOPATH环境变量 全局的GOPATH环境变量用于存放下载安装的Go项目代码和二进制文件,执行go install会编译出可执行文件,并拷贝到`$GOPATH/bin`目录下;执行go get会将代码下载到`$GOPATH/src`目录下,并进行编译和安装,相比go install增加了下载源码步骤。 ![title](/api/file/getImage?fileId=6031191456fec87f920003a4) ![title](/api/file/getImage?fileId=6031192456fec87f920003a5) 2、配置项目的“临时”GOPATH GOPATH下有三个目录: * src:源代码,以Go的包进行管理 * bin:编译安装后可执行文件的路径 * pkg:编译中间文件的存放路径,例如编译一个非main包产生的静态库文件 在全局GOPATH之外创建一个Go的工程,将工程的目录临时添加到GOPATH环境变量中,注意要将工程目录放在GOPATH最前面,Go的编译器等相关工具会按GOPATH的顺序进行搜索,我们要让工程目录的优先级最高,此时go install和go get产生的文件都在工程目录下: ![title](/api/file/getImage?fileId=6031194d56fec87f920003a6) 为了能让Goland自动设置我们工程的“临时”GOPATH,可以在这里进行设置: ![title](/api/file/getImage?fileId=6031195b56fec87f920003a7) 【使用go mod】 我们使用和上面例子同样的工程,首先删除设置的“临时”GOPATH,可以看到Goland已经不识别工程中的包了: ![title](/api/file/getImage?fileId=6031196c56fec87f920003a8) 需要将包的路径改为工程中的绝对路径: ![title](/api/file/getImage?fileId=6031197956fec87f920003a9) go modules是Go 1.11之后支持的依赖管理方式,我们需要设置一下系统环境变量和Go的环境变量: ``` set GO111MODULE=auto go env -w GO111MODULE=auto go env -w GOPROXY=https://goproxy.cn,https://goproxy.io,direct ``` GO111MODULE设置为auto是指,在GOPATH下的工程,默认使用旧的GOPATH的管理方式,而在GOPATH外的工程,默认使用go modules的管理方式。如果该选项设置为on,则无论GOPATH中还是GOPATH外的工程,都必须有go.mod,通过go modules的方式进行依赖管理。 Goland此时会识别到我们使用了go modules,勾选支持: ![title](/api/file/getImage?fileId=603119a256fec87f920003aa) ![title](/api/file/getImage?fileId=603119c356fec87f920003ab) 接着就可以使用go mod命令对依赖进行管理,常用命令如下: ``` go mod init [module名称] # 在工程根目录执行,初始化一个go.mod文件。如果是在GOPATH下的工程中,可以省略module名称,默认使用包名 go get ./... # 下载依赖,默认会下载到$GOPATH/pkg/mod目录下 go get github.com/astaxie/beego@v1.12.1 # 只有使用go modules管理时才能加版本号 go mod download # 下载go.mod中的依赖 go mod tidy # 整理go.mod,删除不用的,增加需要的 ``` 注意: * 如果使用go mod进行包管理,要在goland中启用Enable Go Modules Integration,关闭Index entire GOPATH * go.mod放在工程的src目录下,自定义module名称,同目录下必须有main包 * import包的时候,使用<go.mod中设置的module名称>/包名进行引用
上一篇:
beego+swagger生成API文档
下一篇:
番茄牛腩
0
赞
95 人读过
新浪微博
微信
腾讯微博
QQ空间
人人网
文档导航