Go module的介绍及使用

Posted @Kerry~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go module的介绍及使用相关的知识,希望对你有一定的参考价值。

初步学习goland语言,对于1.11版本后的新特性 go module初步认识一下。
Module即是模块概念,官方定义为:一个相关Go包的集合,它是源代码更替和版本控制的单元,即是包的管理工具,以前的依赖GOPATH安装的包都是在 $GOPATH/src/目录,现在采用了go mod 管理相关依赖和包package,就是安装到 $GOPATH/pkg/ 下面。modules替换旧的基于GOPATH的方法来指定在给定构建中使用哪些源文件。

下面说一下设置

设置go mod和go proxy

// 设置开启go mod 管理依赖包
go env -w GO111MODULE=on
// 修改代理路径
go env -w GOPROXY=https://goproxy.cn,direct // 使用七牛云的
// 查看相关配置
go env

GO111MODULE 有三个值:off, on和auto(默认值)。

GO111MODULE=off,go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找。
GO111MODULE=on,go命令行会使用modules,而一点也不会去GOPATH目录下查找。
GO111MODULE=auto,默认值,go命令行将会根据当前目录来决定是否启用module功能。

一旦GO111MODULE = on 开始了,那么$GOPATH/src 即将失效,不在src下面安装依赖和包,更到了$GOPATH/pkg 下面

如果当你使用了go mod 管理依赖时候可能会出现 相关的包无法引入问题,例如:gin框架

我曾经试过,所以顺便讲一下。

创建main.go 文件 代码如下:

package main

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

func main() {
	// 创建一个默认的路由引擎
	r := gin.Default()
	// GET:请求方式;/hello:请求的路径
	// 当客户端以GET方法请求/hello路径时,会执行后面的匿名函数
	r.GET("/hello", func(c *gin.Context) {
		// c.JSON:返回JSON格式的数据
		c.JSON(200, gin.H{
			"message": "Hello world!",
		})
	})
	// 启动HTTP服务,默认在0.0.0.0:8080启动服务
	r.Run()
}

发现:github.com/gin-gonic/gin 无法引进

提示:no required module provides package github.com/gin-gonic/gin;

// mod重新初始化
go mod init 项目名称
// 安装或者修改 你的go.mod 文件(安装package)下载指定的包
go mod edit -require github.com/gin-gonic/gin@latest

// 记得执行下面命令 不然报错 go: github.com/gin-gonic/gin@v1.7.1: missing go.sum entry;
// 移除不需要的依赖包
go mod tidy

记得执行 go mod tidy 命令,会在go.mod 目录下生成一个 go.sum文件,如果没有执行就会报错

go: github.com/gin-gonic/gin@v1.7.1: missing go.sum entry;

go.sum 是记录所依赖的项目的版本的锁定,执行完以后,go.mod 将会自动引入相关的包

go mod 相关命令

查看命令
go help mod

go mod download	download modules to local cache(下载依赖包)

go mod edit	edit go.mod from tools or scripts(编辑go.mod)

go mod init 项目目录 初始化mod 命令

其中发现一个比我更加详细的关于go Module的文章:https://blog.csdn.net/benben_2015/article/details/82227338

以上是关于Go module的介绍及使用的主要内容,如果未能解决你的问题,请参考以下文章

Go-包管理(管理工具对比及go mod的使用)

go module基本使用

GoModule:v2及新版本(Go Modules: v2 and Beyond译文)

go modules

使用GoModule(Using Go Modules译文)

go module 使用