环境配置
我们先简单区分一下GOROOT
和GOPATH
GOROOT
定义 :GOROOT 是Go语言的安装目录,即Go工具链和标准库的存放位置,类似于Java的JDK路径 作用 :系统通过GOROOT定位Go的内置工具(如编译器、运行时)和标准库源码。例如,导入fmt等标准库时,会优先在此路径下查找 默认值 :若未手动配置,安装Go时会自动设置GOROOT为安装路径(如 /usr/local/go),普通用户无需修改。
GOPATH
定义 :GOPATH 是开发者自定义的工作区路径,用于组织项目代码、第三方依赖包及编译生成的中间文件(如归档文件、可执行文件) 作用 :Go的包管理机制会从GOPATH/src目录下查找项目代码,并将依赖包下载到GOPATH/pkg,编译结果存入GOPATH/bin 。早期版本(Go 1.11前)依赖GOPATH管理依赖,需手动配置 多路径支持 :GOPATH可设置多个目录,Go会按顺序在这些路径中查找包 默认值 :若未手动配置,默认路径为用户主目录下的go文件夹(如 /home/user/go)
我们来看看这段代码
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
router := gin.Default()
router.Run()
}
我们import
了一个github.com/gin-gonic/gin
套件,这个是别人开发的Web Framework套件,是不存在于官方程式库的,而是放在GitHub上的第三方套件。
当我们执行Golang程式码,当需要存取套件时,会先去GOROOT路径下的src资料夹找同等于我们在程式码中import的路径下去找有没有gin这个资料夹,而这资料夹里面就是包含了所有有关于该套件的程式库。 如果在GOROOT路径下没有找到,则会往GOPATH路径下的src资料夹找同等于我们在程式码中import的路径下去找有没有gin这个资料夹。所以只要GOROOT跟GOPATH路径下都没有找到该套件的话,就无法执行该程式码。
Go Modules的诞生
但这时我们会遇到一个问题,如果你开发的专案采用第三方套件是不同版本怎么办?以往的解决方法是要设定多组不同的GOPATH
。所以为了解决不被GOPATH
的问题,因此官方在1.11开始推出了Go Modules
的功能。Go Modules解决方式很像是Java看到Maven的做法,将第三方程式库储存在本地的空间,并且给程式去引用。
我们直接使用命令
go mod init
会出现一个go.mod文件,然后我们要使用什么第三方的包,直接写入即可
module awesomeProject
go 1.13
require github.com/gin-gonic/gin v1.6.3
再使用命令
go mod download
即可进行下载。也可以直接使用
go get github.com/gin-gonic/[email protected]
即可实现一步到位的下载。