Go Module使用教程

文章目录

    • 前言
    • Go Module是什么?
    • GO111MODULE
    • 创建一个新模块
    • go mod 命令
    • 替换包
    • go get 升级
    • go mod vendor

前言

在Go1.11发布之后,其中最重要的变化之一是go module.刚开始接触总是对它不知所以然,在实践的过程中,感觉搞不清楚它是干嘛的,今天看了很多文章,记录一下Go Modules的使用。

Go Module是什么?

总结来说,它是一个项目依赖解决方案。原来我们把包都放在GOPATH里面,使用类似命名空间的包路径区分包,但是这种包依赖可能会造成生产环境和测试环境出现运行不一致的问题。
Go module(也叫vgo),通过go mod文件进行管理,Go允许在$GOPATH外的任何目录下使用go.mod创建项目。

GO111MODULE

要使用go module,首先要设置GO111MODULE=on.

创建一个新模块

使用Goland的话需要在File->setting中开启Go module
Go Module使用教程_第1张图片

新建一个项目目录,如$GOPATH/src/learnmodule,然后在该项目目录下(或者使用绝对路径)使用命令go mod init learnmodule,就会在该目录下创建一个空的go.mod.打开看一下会只有一行

module learnmodule

然后就开始写自己的项目,如写一个main.go

package main

import (
	"fmt"

	"rsc.io/quote"
)

func main() {
	fmt.Println(quote.Hello())
}

使用go run main.go,如果没有这个包,使用Goland中的Sync packages of github.com/JetBrains/go-samples 快速修复。go mod就会自动下载这个包所有的依赖,然后会将依赖复制到vendor中,go mod下也会出现一个go.sum的文件,里面记录着此项目中的所有依赖。

go mod 命令

download    download modules to local cache (下载依赖的module到本地cache))
edit        edit go.mod from tools or scripts (编辑go.mod文件)
graph       print module requirement graph (打印模块依赖图))
init        initialize new module in current directory (再当前文件夹下初始化一个新的module, 创建go.mod文件))
tidy        add missing and remove unused modules (增加丢失的module,删除未用的module)
vendor      make vendored copy of dependencies (将依赖复制到vendor下)
verify      verify dependencies have expected content (校验依赖)
why         explain why packages or modules are needed (解释为什么需要依赖)

替换包

在国内访问golang.org/x的各个包都需要,可以用go mod中replace替换成github上的库

replace (
	golang.org/x/crypto v0.0.0-20180820150726-614d502a4dac => github.com/golang/crypto v0.0.0-20180820150726-614d502a4dac
	golang.org/x/net v0.0.0-20180821023952-922f4815f713 => github.com/golang/net v0.0.0-20180826012351-8a410e7b638d
	golang.org/x/text v0.3.0 => github.com/golang/text v0.3.0
)

go get 升级

  • go get -u将会升级到最新的次要版本或者修订版本
  • 运行 go get -u=patch 将会升级到最新的修订版本
  • 运行 go get package@version 将会升级到指定的版本号version

go mod vendor

go mod vendor 会复制modules下载到vendor中

你可能感兴趣的:(计算机语言---go语言,go)