Go Module模式:基本命令、导入第三方库

本文介绍了Go Module的使用,包括go mod文件内容、环境变量如GO111MODULE、GOPROXY、GOSUMDB和GOPRIVATE的设置。详细讲解了如何初始化项目、导入和管理第三方库,以及如何更改模块依赖关系。强调了go.sum文件在确保模块版本安全方面的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

  • 当我们在使用import导入包的时候,无法指定版本号,但我们知道不同版本的包存在大大小小的差异,版本不可控是十分危险的。因此我们需要使用module模式来进行版本控制。
  • 使用:需要将代码仓库放到环境变量的GOPATH/src目录外,然后在代码目录下创建一个go.mod文件,然后在代码目录下执行go命令。

go mod文件内容

  • module 当前模块名称
  • go 版本号
  • require 所需第三方库

go mod命令

输入go mod help可以查看到所有go mod命令:以下命令前缀是go mod

  • init:生成go.mod文件
  • download:下载go.mod文件中指明的所有依赖
  • tidy:整理现有的依赖
  • graph:查看现有的依赖结构
  • edit:编辑go.mod文件
  • vendor:导出项目所有的依赖到vendor目录
  • verity:校验一个模块是否被篡改过
  • why:查看为什么需要依赖某模块

go mod环境变量

可以通过命令go env查看go mod的环境变量,常用的有以下几个环境变量

GO111MODULE

go在1.1.1版本后才有moudle模式,因此起名111。

允许设置为以下参数:使用命令go env -w GO111MODULE=on设置

  • auto:只要项目包含go.mod文件的话启用Go module。Go1.11-1.14的默认值。
  • on:启用Go module。目前(1.17)默认值。
  • off:禁用Go module。

GOPROXY

主要用于设置模块代理,可以通过设置的网站,快速拉取模块版本。第三方依赖库下载的源地址。

默认值是:https://proxy.golang.org,direct(国内无法访问)
常见的国内代理有:使用命令go env -w GOPROXY=https://goproxy.cn,direct设置
(1)阿里云:https://mirrors.aliyun.com/goproxy/
(2)七牛云:https://goproxy.cn,direct
添加direct的话,如果当前代理路径找不到,会到包所在的原路径找。
查看当前值:go env|grep GOPROXY

注意:设置的镜像地址GOPROXY,同时也会代理GOSUMDB的检查工作,因此可以不用重复设置GOSUMDB。

GOSUMDB

用于在拉取模块版本的时候,保证拉取到的数据未经过篡改。如果发现不一致,即可能发现篡改,将会立即终止。

默认值是:sum.golang.org(国内无法访问)
查看当前值:go env|grep GOSUMDB
如果不希望校验,将该值改为off

该值能够被Go模块代理所代理,因此我们可以通过GOPROXY来解决默认值无法直接访问的问题,因此设置GOPROXY后,无需额外设置。

GOPRIVATE

当项目依赖了私有模块,需要设置GOPRIVATE来指明某一个或一类私有模块,GOPRIVATE设置的值会作为GONOPROXY和GONOSUMDB的默认值,这样不会被GOPROXY指定的Go模块代理,也不会被GOSUMDB指定地址检查。

该值可以设置多个,多个间通过英文逗号","分割。也可以使用通配符,设置某一类。

$ go env -w GORIVATE="*.example.com,git.text.com"

初始化项目并使用第三方库

学习视频:https://www.bilibili.com/video/BV1gf4y1r79E?p=35

前提:开启了Go Moudules模块

查看当前值:go env|grep GO111MODULE,当前值必须为on
方式一:执行命令go env -w GO111MODULE=on
方式二:在用户启动脚本(环境变量)中添加export GO111MODULE=on,保存后需要执行source ~/.bashrc

初始化项目

  1. 任意文件夹下创建一个项目(无需在$GOPATH/src下):mkdir -p 项目路径/项目名称
  2. 生成go.mod文件:go mod init 项目路径/项目名称
    go.mod文件内容中只有当前模块名称和go版本号。
  3. 在项目中编写源代码

导入第三方库

  1. 在项目中编写的源代码依赖某个第三方库,需要down
    · 手动:go get 第三方库路径,可以指定版本号
    · 自动
  2. 成功后会看到go.mod文件中添加了新代码,require 第三方库路径 版本号,可能末尾还添加了//indirect,表示间接依赖,依赖其中的某一部分。
  3. 导入后会生成一个go.sum文件。
    go.sum文件的作用:罗列当前项目直接或间接依赖的所有模块版本,保证今后项目依赖的版本不会被篡改,其中会生成一些hash值。
    · 第三方库 版本号 h1:hash 是利用依赖库的全部文件的校验和生成的hash,如果不存在,可能表示依赖的库用不上。
    · 第三方库 版本号/go.mod h1:hash 仅用go.mod文件做的hash,一定存在。

改变模块依赖关系

当我们模块依赖的是A,但我们想修改为B的时候,我们可以改变模块依赖关系

使用go mod edit -replace=原依赖=替换依赖命令,这时候go.mod文件会多一行replace 原依赖 => 替换依赖


学习自刘丹冰Aceld视频:https://www.bilibili.com/video/BV1gf4y1r79E

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值