go modules使用

什么是Go Modules

Go Modules 是 Golang 官方最近几个版本推出的原生的包管理方式,类似于php的composer、java的maven
1、使用方式

我的版本:
go version go1.13.6 windows/amd64
使用前需要开启环境变量 GO111MODULE off/on/auto 
go env -w GO111MODULE=on

在 GOPATH 之外创建一个项目test,包含一个 main.go 文件,内容如下:

package main

import (
	"github.com/labstack/echo"
	"net/http"
)

func main() {
	e := echo.New()
	e.GET("/", func(c echo.Context) error {
		return c.String(http.StatusOK, "Hello, World!")
	})
	e.Logger.Fatal(e.Start(":1323"))
}

在该项目根目录下执行,会在根目录下生成go.mod文件,这个文件中标识了我们的项目的依赖的 package 的版本。执行 init 暂时还没有将所有的依赖管理起来。我们需要将程序 run 起来(比如执行 go run/test),或者 build(执行命令 go build)的时候,才会触发依赖的解析

go mod init test

执行该文件 go run main.go,go.mod文件变成了这样

module echo

go 1.13

require (
	github.com/labstack/echo v3.3.10+incompatible
	github.com/labstack/gommon v0.3.0 // indirect
	github.com/mattn/go-colorable v0.1.6 // indirect
	github.com/valyala/fasttemplate v1.1.0 // indirect
	golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d // indirect
	golang.org/x/net v0.0.0-20200226121028-0de0cce0169b // indirect
	golang.org/x/text v0.3.2 // indirect
)

同时我们发现项目目录下多了一个 go.sum 用来记录每个 package 的版本和哈希值。go.mod 文件正常情况会包含 module 和 require 模块,除此之外还可以包含 replace 和 exclude 模块。

这些 package 并不是直接存储到 $GOPATH/src,而是存储到 $GOPATH/pkg/mod 下面,不同版本并存的方式

进阶知识
因为众所周知的原因,下载依赖包会出现各种稀奇古怪的事情,归根结底就是网络问题,所以要想规避类似问题,需要切换源,然后就能体验飞速下载的感觉了

go env -w GOPROXY=https://goproxy.cn,direct

文章引用:https://zhuanlan.zhihu.com/p/82109036

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章