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

学习记录

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


相关推荐
microrain5 小时前
SagooIoT 的数据接入层只有四张表,却能接住三种外部数据
物联网·golang·数据建模·sagooiot
fly-iot5 小时前
【FDE知识库】(4):企业知识库怎么选型,开源知识库分享几个,选择开源协议友好的版本,开发wiki-go项目
golang·开源·开源协议
福大大架构师每日一题8 小时前
excelize v2.11.1发布:Go 1.26.0起步,16项安全修复与嵌入对象能力全面升级
开发语言·安全·golang
小小龙学IT9 小时前
Go 语言 pprof 性能剖析与调优深度解析:把“卡在哪“变成一张可执行的数据图
开发语言·后端·golang
十二同学啊10 小时前
Go 工程化详解:项目结构、代码规范、测试体系与 CI/CD 实践
ci/cd·golang·代码规范
利威尔xu20 小时前
Go IM 源码实战(14):本地缓存快 3000 倍,失效却难 10 倍
后端·缓存·微服务·面试·golang
利威尔xu1 天前
Go IM 源码实战(13):30 个会话只有 2 个红点,未读数错在三条路径
redis·后端·微服务·面试·golang
FungLeo1 天前
成为全栈·Go 后端篇·从 Node SQLite 到 PostgreSQL:把迁移做成独立交付物
postgresql·golang·sqlite·go·数据库迁移·成为全栈
皓月盈江1 天前
GO使用Gin框架实现模板定义、解析与渲染
linux·golang·go·gin·定义模板·解析模板·渲染模板
利威尔xu1 天前
万字详解|Go 进阶(五):sync 包底层:Mutex 自旋 4 次转饥饿,WaitGroup 漏 1 个 Done 挂起 3000 goroutine
后端·golang·并发编程·源码分析·sync