【go项目01_学习记录05】

embedded/2024/9/25 0:29:41/

学习记录

  • 1 依赖管理 Go Modules
    • 1.1 弃用 $GOPATH
    • 1.2 Go Modules 日常使用
      • 1.2.1 初始化生成go.mod文件
      • 1.2.2 Go Proxy代理
      • 1.2.3 go.mod文件查看
      • 1.2.4 go.sum文件查看
      • 1.2.5 indirect 含义
      • 1.2.6 go mod tidy 命令
      • 1.2.7 清空 Go Modules 缓存
      • 1.2.8 下载依赖
      • 1.2.9 所有 Go Modules 命令
      • 1.2.10 相关环境变量
  • 2 补充
    • 2.1 git checkout .
    • 2.2 遇到换行符警告

1 依赖管理 Go Modules

1.1 弃用 $GOPATH

Go Modules 出现的目的之一就是为了解决 GOPATH 的问题。
在 $GOPATH 时代,Go 源码必须放置于 $GOPATH/src 下,抛弃 $GOPATH 的好处,是你能在任意地方创建的 Go 项目。
另外,$GOPATH 有非常落后的依赖管理系统。因在执行 go get 时,无法传达任何版本信息。
在构建 Go 应用程序上,我们无法保证其它人与你所期望依赖的第三方库是相同的版本(相同的代码),也就是说无法保证所有人的依赖版本都一致。

1.2 Go Modules 日常使用

1.2.1 初始化生成go.mod文件

go mod init

1.2.2 Go Proxy代理

因国内访问外网受限,一般我们都会配合 Go Proxy 使用,以防止使用 go get 获取源码包时花费时间过长或无法下载,安装 package 的原则是先拉最新的 release tag,若无 tag 则拉最新的 commit。

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

1.2.3 go.mod文件查看

每一次go get都会同时修改go.mod和go.sum文件
在这里插入图片描述
在这里插入图片描述
参数:
module —— 我们的 goblog 在 Go Module 里也算是一个 Module ;
go —— 指定了版本要求,最低 1.20
require —— 是项目所需依赖

1.2.4 go.sum文件查看

保存着依赖包的版本和哈希值:
在这里插入图片描述
go.sum 里不仅会保存直接依赖包的哈希值,间接依赖包的哈希值也会被保存。
每个模块路径有如下两种哈希
在这里插入图片描述
相当于”双重锁“确保一致性

1.2.5 indirect 含义

在这里插入图片描述
此标志标明这个依赖包还未被使用,如果你在代码的某个地方 import 到的话,VSCode 的 Go 插件就会自动将这个标志去除。

1.2.6 go mod tidy 命令

此命令做整理依赖使用,执行时会把未使用的 module 移除掉

1.2.7 清空 Go Modules 缓存

go mod tidy之后本地缓存有之前go get的内容
在这里插入图片描述
清空本地下载的 Go Modules 缓存:

go clean -modcache

在这里插入图片描述

1.2.8 下载依赖

默认情况下,当 go run 和 go build 命令执行时(启动air会自动执行这两步),Go 会基于 go.mod 文件自动拉取依赖。
在这里插入图片描述

Go Module 也提供了一个命令用以下载项目所需依赖:

go mod download

1.2.9 所有 Go Modules 命令

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

1.2.10 相关环境变量

  1. GO111MODULE
    在这里插入图片描述

  2. GOPROXY

  3. GOSUMDB
    Go Checksum Database 的缩写,用于在拉取模块版本时(无论是从源站拉取还是通过 Go Module Proxy 拉取)保证拉取到的模块代码包未经过篡改,若发现不一致将会立即中止。

  4. GONOPROXY/GONOSUMDB/GOPRIVATE

在这里插入图片描述


2 补充

2.1 git checkout .

git checkout . 命令的含义是将工作目录中所有被修改的文件恢复到最近一次提交的状态,即撤销对这些文件的修改。

2.2 遇到换行符警告

警告是由于 Git 在添加文件时检测到换行符的不一致性而引起的

git config --global core.autocrlf true

在这里插入图片描述



http://www.ppmy.cn/embedded/35042.html

相关文章

鸿蒙开发接口Ability框架:【@ohos.application.FormExtension (FormExtension)】

FormExtension FormExtension模块提供了FormExtension卡片扩展相关接口。 说明: 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 本模块接口仅可在Stage模型下使用。 导入模块 import FormExtension …

【数据分析面试】36.SAAS公司邮件营销策略分析(业务分析)

题目 假设你在一个B2B SAAS公司营销团队工作。本季度即将结束,但当前收入距离预期目标还差10%。营销团队的一个高管要求负责电子邮件营销的人向所有客户群发邮件,要求他们购买更多产品。这是个好主意吗?为什么? 提示1&#xff1…

学习嵌入式可以胜任哪一些行业?

学习嵌入式究竟可以在哪些行业中胜任呢?嵌入式技术的应用范围极为广泛,在众多领域中都发挥着至关重要的作用,这也为学习嵌入式的人提供了极为丰富的职业机会。 就拿机器人行业来说吧,嵌入式技术是机器人能够实现各种复杂功能的关…

面试中算法(使用栈实现队列)

使用栈来模拟一个队列,要求实现队列的两个基本操作:入队、出队。 栈的特点:先入后出,出入元素都是在同一端(栈顶)。 队列的特点:先入先出,出入元素是在两端(队头和队尾)。 分析&…

深度学习简介

什么是深度学习 机器学习是实现人工智能的一种途径 深度学习是机器学习的一个子集,也就是说深度学习是实现机器学习的一种方法。 传统机器学习算术依赖人工设计特征,并进行特征提取,而深度学习方法不需要人工,而是依赖算法自动提…

什么是X电容和Y电容?

先补充个知识: 一、什么是差模信号和共模信号 差模信号:大小相等,方向相反的交流信号;双端输入时,两个信号的相位相差180度 共模信号:大小相等。方向相同。双端输入时,两个信号相同。 二、安规…

【图像特征点匹配】

图像特征点匹配 图像特征点匹配是计算机视觉中的一项关键技术,它涉及在两个或多个图像之间寻找并匹配具有独特属性的点,这些点被称为特征点。 立体视觉:通过匹配同一场景的不同视角图像中的特征点,可以重建场景的三维结构。物体识别:通过匹配物体表面的特征点,可以识别和…

Linux Mint 21.3 “Virginia“ 简介

Linux Mint 21.3 "Virginia" 是Linux Mint项目发布的最新版本,这个版本基于Ubuntu 22.04 LTS(Jammy Jellyfish),并提供了三个主要的桌面环境:Cinnamon、MATE和Xfce。每个桌面环境都有其独特的特点和优势&…