-
博文分类专栏
- Jquery基础教程
-
- 文章:(15)篇
- 阅读:46620
- shell命令
-
- 文章:(42)篇
- 阅读:154526
- Git教程
-
- 文章:(36)篇
- 阅读:235152
- leetCode刷题
-
- 文章:(76)篇
- 阅读:132290
-
Go中的modules初步使用2019-06-29 18:29 阅读(14408) 评论(0)
一、go module是什么
go module是go官方在go1.11版本引进的,用来管理包的依赖关系,可以通过版本号来进行迭代。通过go.mod来管理项目依赖的模块,如下:
module test go 1.12 require ( github.com/beego/bee v1.10.0 // indirect github.com/go-delve/delve v1.2.0 // indirect github.com/golang/protobuf v1.3.2 )
module用来定义项目的模块名字。
go 1.12用来表示,项目使用的go版本。
require用来表示项目引用的模块和模块对应的版本号。
一个模块是由一组相关的软件包组成的一个单元,如下:
在之前的开发中,go项目都需要放到src目录中,如下:
使用go module后,并不是意味着不需要设置GOPATH,只是我们的项目就没必要非得放在特定的“src”目录下。
在go1.11中,go module默认是没有开启的。可以通过环境变量 GO111MODULE来开启,GO111MODULE有三个值,如下:
off,则表示不启用go module
on,则表示开启go module
auto,默认值,如果项目目录下面有go.mod文件,且当前项目不在GOPATH/src目录下,则代表启用go module。
go包导入规则
1、当不启用go module
首先从GOROOT里面找(即go的安装目录里面找),然后从GOPATH里面的src下面查找,如果没有找到就报错。
2、当不启用go module
首先从GOROOT里面找,然后依据项目的go.mod文件,从GOPATH/pkg/mod里面查找,如果没有或是版本号不对,则会自动下载,若下载不到则会报错。
二、如何使用go module
1、创建项目目录
mkdir test
项目所在位置可以任意指定。
2、初始化一个模块
go mod init test
然后,可以看到项目目录下面生成了一个go.mod的文件,如下:
module beeTest go 1.12
3、编写项目main.go文件
package main import ( "fmt" "rsc.io/quote" ) func main() { fmt.Println(quote.Hello()) }
4、编译并执行
go build
报错“go: error loading module requirements”因为“dial tcp 216.239.37.1:443: i/o timeout”,如下:
因为go的代码库在美国,国内访问不了。此时就需要GOPROXY 这个环境变量,它能够我们控制go从哪里去下载源代码。
设置GOPROXY 如下
export GOPROXY=https://goproxy.io
关于更多的goproxy.io,可以看起官网。
然后再执行go build 就不会报错了。
./test
输出如下:
Hello, world.
三、使用go module的优缺点
1、go module的优点
a、不必将项目放到GOPATH中
b、go build或go run 的时候,会自动拉取本地没有,但import的包。