Go学习总结-go module

2,613 阅读1分钟

包管理 - go module

go从v1.11版之后就推出了新的包管理,go module,它和之前的$GOPATH不同,已经不在需要src,bin这样的子目录了,一个源代码目录甚至是空目录都可以作为module,只要其中包含有go.mod文件。接下来看一下go module的能力。

初始化包

首先设置下环境变量 GO111MODULE=auto 如果go的版本是v1.11之后的可以不用设置这个变量,因为1.11之后的版本,默认都是使用go module。在$GOPATH以外的目录里新建个文件夹,然后执行

go mod init 模块名

就能在目录下看到go.mod文件,里面包含了模块的名称,和go的版本

module goModule
go 1.12

运行

在目录下建一个hello.go文件,引入gin这个第三方包

package main

import "github.com/gin-gonic/gin"

func main()  {
	router := gin.Default()
	router.Run()
}

go module之前,我们需要执行 go get github.com/gin-gonic/gin来安装包,现在不需要了,直接 go run hello.go 程序会自动下载需要的包。我们再配合 go proxy,在环境变量里设置export GOPROXY=https://goproxy.io ,从此之后,不需要翻墙,也能快速的下载第三包了,简直感人[]~( ̄▽ ̄)~*

再看看go.mod文件

module goModule

go 1.12

require (
	github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3 // indirect
	github.com/gin-gonic/gin v1.3.0 // indirect
	github.com/golang/protobuf v1.3.1 // indirect
	github.com/mattn/go-isatty v0.0.7 // indirect
	github.com/ugorji/go v1.1.4 // indirect
	gopkg.in/go-playground/validator.v8 v8.18.2 // indirect
	gopkg.in/yaml.v2 v2.2.2 // indirect
)

require里是程序需要的第三方包,也标明了版本号,而下载的源码包在$GOPATH/pkg/mod文件夹里。

引入自定义包

现在引入自定义包,也不需要把源码放在$GOPATH/src文件夹里了,直接使用模块名+路径。在目录里新建一个test文件夹,文件夹里建一个test.go,现在目录结构:

├── go.mod
├── go.sum
├── hello.go
└── test
    └── test.go

test.go👇

// test.go
package test

import "fmt"

func Test(){
	fmt.Println("TEST")
}

hell.go👇

// hello.go
package main

import (
	"github.com/gin-gonic/gin"
	"goModule/test"  // 模块名 + 路径
)


func main()  {
	test.Test() // 调用
	router := gin.Default()
	router.Run()
}

最后直接go run hello.go,完美运行~~

讲真在go module出来之前,go的包管理功能不是那么好用,不论是版本管理,还是包下载,体验都不太好。go module出来之后大大改善了包管理功能。