Go mod 是 go 1.11 version 之后出的管理套件的工具,并且Go 1.13 version 之后成为管理套件的正式工具(成为default)。
範例程式码
GOPATH使用方式(早期使用方式)
在go mod 发布之前都是需要在$GOPATH/src路径下才能够使用,当需要使用模组的时候,必须将用到的资料夹link 到$GOPATH/src才能够使用。
以上图为例,如果要使用模组需确保/home/ubuntu/go/src中有该模组才能够取用。下面举hello world实例。
档案结构: 执行go run main.go 印出 hello world
-hello_GOPATH/ - main.go - src/ - hello/ - hello.go
step 1. 将GOPATH指到目前资料夹
go env -w GOPATH=$(pwd)
step 2. 撰写package hello 模组(package)
package helloimport "fmt"func PrintHello() { // fun大写代表public(才能够被存取) fmt.Println("hello world")}
step 3. 将package资料夹link 到$GOPATH/src/
ln -s `pwd`/hello $(go env GOPATH)/src
step 4. 撰写package main
package mainimport "hello" // src/hello 资料夹下func main() { hello.PrintHello()}
执行结果:
Go mod 使用方法
这种用法不用像使用GOPATH的方法,需要改变GOPATH的位置。而是透过go.mod档案辨识目前要执行的专案位置(取代GOPATH设定)。并且go.mod可以纪录所有使用的相依模组,只要透过go install指令就可以自动安装所有相依模组的功能。
档案结构: 执行go run main.go 印出 hello world
-hello/ - main.go - go.mod - hello/ - hello.go
step 1. go mod init hello
所产出的 go.mod 内容物:
module hello //产生出来的模组名go 1.15 // golang 现在的版本
step 2. 撰写hello 模组
package helloimport "fmt"func PrintHello() { // fun大写代表public(才能够被存取) fmt.Println("hello world")}
step 3. 撰写package main(需要在最上层)
package mainimport "hello/hello" //module/package namefunc main() { hello.PrintHello()}
执行结果:
v1.11之后为了解决套件管理的问题,官方出现了go mod的工具,并且v1.11、v1.12可以共存GOPATH的存在。然而在1.13之后GOPATH跟go mod两者是不能并存的 (GOPATH不可指向有go.mod 的资料夹) 。
总结
在撰写Golang 专案的时候,尽量的使用go mod,尽量不修改GOPATH来开发。因为go mod会帮助开发者纪录相依的模组,方便之后部署、交付程式码。
参考资料
https://blog.golang.org/using-go-modules