Go module的介绍及使用

本文介绍了Go 1.11版本后的新特性gomodule,包括其作为包管理工具的作用、如何设置并管理依赖,以及在使用gin框架时遇到的问题解决方案。重点讲解了模块启用、GOPATH的替代以及如何导入和初始化gin模块。

初步学习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.youkuaiyun.com/benben_2015/article/details/82227338

### Go Modules 使用指南 Go Modules 是 Go 语言官方提供的依赖管理工具,旨在解决依赖版本管理和模块化的问题。以下是对 Go Modules 的详细使用说明: #### 初始化模块 通过 `go mod init` 命令可以初始化一个模块,并生成 `go.mod` 文件。该文件定义了模块的路径以及其依赖关系。例如: ```bash go mod init github.com/yourname/myapp ``` 这将创建一个名为 `github.com/yourname/myapp` 的模块,并在当前目录生成 `go.mod` 文件[^2]。 #### 添加依赖 当项目需要引入外部依赖时,可以通过 `go get` 命令安装或更新指定模块。例如: ```bash go get github.com/someuser/somemodule@v1.2.3 ``` 此命令会将指定版本的模块添加到项目的依赖中,并更新 `go.mod` 和 `go.sum` 文件[^2]。 #### 清理和补全依赖 使用 `go mod tidy` 命令可以清理未使用的依赖并补全缺失的依赖。这是维护项目依赖的重要步骤,确保所有依赖都是必要的且最新的: ```bash go mod tidy ``` #### 下载依赖 通过 `go mod download` 命令可以下载所有列出的依赖项到本地缓存中,而不执行编译操作。这对于离线构建环境特别有用: ```bash go mod download ``` #### 查看依赖 要查看当前模块的所有依赖项及其版本信息,可以使用以下命令: ```bash go list -m all ``` 这将输出一个完整的依赖列表,包括直接依赖和间接依赖[^3]。 #### 显示依赖关系图 为了更直观地理解模块间的依赖关系,可以使用 `go mod graph` 命令生成依赖关系图: ```bash go mod graph ``` #### 验证依赖完整性 确保项目中的依赖文件没有被篡改,可以使用 `go mod verify` 命令进行验证。如果发现任何不一致,系统会提示错误: ```bash go mod verify ``` #### go.mod 和 go.sum 文件 - **go.mod**:记录模块的基本信息(如模块路径、Go 版本)以及所有直接依赖。 - **go.sum**:记录所有直接和间接依赖的哈希值,用于验证依赖的完整性。 ### 示例代码 以下是一个简单的示例,展示如何初始化模块并添加依赖: ```bash # 初始化模块 go mod init example.com/hello # 添加依赖 go get github.com/golang/example@latest # 清理和补全依赖 go mod tidy ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值