go mod
在 go 1.11以后可以使用 go mod 来管理包,终端输入go env查看 go 版本、GOPATH 等信息
➜ ~ go env
GO111MODULE="auto"
GOARCH="arm64"
GOBIN=""
GOCACHE="/Users/xiejianjun/Library/Caches/go-build"
GOENV="/Users/xiejianjun/Library/Application Support/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="arm64"
GOHOSTOS="darwin"
GOINSECURE=""
GOMODCACHE="/Users/xiejianjun/Documents/Go/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="darwin"
GOPATH="/Users/xiejianjun/Documents/Go"
GOPRIVATE=""
GOPROXY="https://goproxy.cn,direct"
GOROOT="/usr/local/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_arm64"
GOVCS=""
GOVERSION="go1.16.5"
GCCGO="gccgo"
AR="ar"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -arch arm64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/dv/jt8knsq10p18_b0tk6_zjr8nqf792_/T/go-build727095823=/tmp/go-build -gno-record-gcc-switches -fno-common"
GO111MODULE
配置GO111MODULE有 3 个值分别为:
off:go 命令行将不会支持 module 功能,寻找依赖包的方式将会沿用旧版本那种通过 vendor 目录或者 GOPATH 模式来查找。on:go 命令行会使用 modules,而一点也不会去 GOPATH 目录下查找。auto:默认,go 命令行将会根据当前目录来决定是否启用 module 功能。分为两种情形:当前目录在 GOPATH/src 之外且该目录包含 go.mod 文件,当前文件在包含 go.mod 文件的目录下面。 要使用 go mod GO111MODULE 必须为on或者auto。
go mod 命令
通过终端输入go help查看 go mod 命令如下:
➜ ~ go help mod
Go mod provides access to operations on modules.
Note that support for modules is built into all the go commands,
not just 'go mod'. For example, day-to-day adding, removing, upgrading,
and downgrading of dependencies should be done using 'go get'.
See 'go help modules' for an overview of module functionality.
Usage:
go mod <command> [arguments]
The commands are:
download download modules to local cache (下载依赖包)
edit edit go.mod from tools or scripts (编辑go.mod)
graph print module requirement graph (打印模块依赖图)
init initialize new module in current directory (打印模块依赖图)
tidy add missing and remove unused modules (拉取缺少的模块,移除不用的模块)
vendor make vendored copy of dependencies (将依赖复制到vendor下)
verify verify dependencies have expected content (验证依赖是否正确)
why explain why packages or modules are needed (解释为什么需要依赖)
Use "go help mod <command>" for more information about a command.
实际比常用的只有init初始化化 go mod 项目,tidy 拉一下依赖。
创建一个 go mod 项目
通过一下命令
# 创建目录
$ mkdir go-test
$ cd go-test
# 初始化go mod
$ go mod init go-test
这是根目录会创建一个go.mod文件
module go-test
go 1.16
创建main.go文件,并填写一下代码。
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
// 1.创建路由
r := gin.Default()
// 2.绑定路由规则,执行的函数
// gin.Context,封装了request和response
r.GET("/", func(c *gin.Context) {
c.String(http.StatusOK, "hello World!")
})
// 3.监听端口,默认在8080
// Run("里面不指定端口号默认为8080")
r.Run(":8000")
}
在命令行中执行
➜ go-test go mod tidy
go: finding module for package github.com/gin-gonic/gin
go: downloading github.com/gin-gonic/gin v1.7.7
go: found github.com/gin-gonic/gin in github.com/gin-gonic/gin v1.7.7
go mod 会自动补齐依赖,并且 go 会自动生成一个 go.sum 文件来记录 dependency tree。
GOPROXY
由于国内的环境因素,很多包会下载的很慢,甚至无法下载,国内有很多 go 镜像其中 七牛云的Goproxy.cn用的比较多。 终端输入以下命令配置代理:
$ go env -w GO111MODULE=on
$ go env -w GOPROXY=https://goproxy.cn,direct
