在《Go环境变量配置(二)》一文中,我们注意到一个名为GO111MODULE的环境变量,这个变量的出现与Go项目依赖管理方式有关。
在v1.11版本之前,Go项目的创建位置必须在GOPATH\src目录下,项目依赖包没有成熟的管理体系,相同依赖不同版本的包无法区分,依赖基本通过go get命令或者下载依赖源码的方式获取。从v1.11版本开始,go支持go module方式来管理项目的依赖,这有点类似java开发中的maven,但是在实际操作顺序上可能有点不一样。
关于go语言依赖管理的文章可以查看《Go语言包管理简史》和《Go包管理的前世今生》。
由于实际开发中,读者可能会碰到版本比较老的项目,所以本文将以两种包管理方式分别创建入门项目,而刚好GoLand IDE支持这两种方式来创建项目。
- 创建GO(GOPATH)项目
打开【File】->【New】->【Project】,选择Go(GOPATH),Location默认是在%GOPATH%\src目录下,点击【Create】按钮,创建的项目下没有任何项目文件。
从GoLand上项目目录可以知道,%GOPATH%\src目录下的源码都可以引用。
在hello1目录下创建main.go文件。右键hello1目录,选择【New】->【Go File】,输入“main”,选择Simple application,因为这是一个程序运行入口文件。
编辑main.go内容如下:
package main
import "fmt"
func main() {
fmt.Println("Hello world!")
}
上述代码没有引用第三方的依赖包,所以无法感觉GOPATH依赖管理方式的不便性。接下来我们对main.go进行修改,内容如下:
package main
import (
"fmt"
"rsc.io/quote"
)
func main() {
fmt.Println("Hello world!", quote.Hello())
}
上述代码我们应用"rsc.io/quote"第三方依赖包,但是由于我们本地依赖库没有对应的依赖包,所以该程序会出现编译错误提示。接下来我们需要手动下载quote依赖,有两种方式:
(1)使用go get -u rsc.io/quote命令下载
(2)使用git clone下载quote的源码到%GOPATH%\src\rsc.io目录
但是这两种方法都无法将间接依赖下载下来,意味着我们需要不停的下载当前未知的间接依赖,简直痛不欲生的体验。以此,这种构建项目的方式不再过多介绍了。
- 创建GO(GO MODULE)项目
打开【File】->【New】->【Project】,选择Go,Location可以选择任何目录(这也是采用GO MODULE模式的一个好处),设置好GOPROXY环境变量。
点击【create】按钮创建成功之后,默认项目下生成一个go.mod文件,这个文件类似Java工程中pom.xml文件。文件内容如下:
module hello1
go 1.20
由于需要使用quote依赖包编写,所以先在go.mod文件中增加依赖如下:
module hello1
go 1.20
require rsc.io/quote v1.5.2
然后在GoLand的Terminal终端上的hello1目录下,执行go get -u rsc.io/quote@v1.5.2命令,该操作不但能下载quote依赖以及它本身的其他依赖,同时也会改变go.mod文件的内容,如下:
module hello1
go 1.20
require rsc.io/quote v1.5.2
require (
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c // indirect
rsc.io/sampler v1.3.0 // indirect
)
rsc.io/quote为项目直接依赖,golang.org/x/text和rsc.io/sampler为间接依赖。这里完全体现了GO MODULE模式的优越性。
在hello1目录下创建hello.go文件,输入内容:
package main
import (
"fmt"
"rsc.io/quote"
)
func main() {
fmt.Println("Hello world!", quote.Hello())
}
此时,这段代码在IDE中是没有编译错误提示的,这段代码可以直接运行,至于如何调试和运行,下一篇文章来介绍,感谢读者跟帖学习。想学习更多Go开发知识,请看《Go学习导读》。
在go项目开发中,可能需要搜索相关依赖已经该依赖的下载地址,本文附go依赖查询网站地址:Go Packages - Go Packages。