【Golang】基础篇

1. Go Module的常规操作

  • 为当前 module 添加一个依赖
  • 升级 / 降级依赖的版本
  • 添加一个主版本号大于 1 的依赖
  • 升级依赖版本到一个不兼容版本
  • 移除一个依赖

为当前 module 添加一个依赖

go 复制代码
package main 

import ( 
    "github.com/google/uuid" 
    "github.com/sirupsen/logrus" 
) 

func main() { 
    logrus.Println(uuid.NewString()) 
}

通过 import 语句导入了 github.com/google/uuid,并在 main 函数中调用了 uuid 包的函数 NewString。使用 go mod tidy 命令,在执行构建前自动分析源码中的依赖变化,识别新增依赖项并下载它们:

md 复制代码
$ go mod tidy
go: finding module for package github.com/google/uuid

升级 / 降级依赖的版本

logrus 为例,可以通过下面命令来进行查询:

md 复制代码
$ go list -m -versions github.com/sirupsen/logrus
github.com/sirupsen/logrus v0.1.0 v0.1.1 v0.2.0 v0.3.0 v0.4.0 v0.4.1 v0.5.0 v0.

如果将 go.mod 中对 logrus 的依赖版本从 v1.8.1 降至 v1.7.0。首先要用 go mod edit 命令,明确告知我们要依赖 v1.7.0 版本,而不是 v1.8.1,这个执行步骤是这样的:

md 复制代码
$go mod edit -require=github.com/sirupsen/logrus@v1.7.0 
$go mod tidy 
go: downloading github.com/sirupsen/logrus v1.7.0

添加一个主版本号大于 1 的依赖、升级依赖版本到一个不兼容版本

首先,我们在源码中,以空导入的方式导入 v7 版本的 github.com/go-redis/redis 包:

go 复制代码
package main 

import ( 
    _ "github.com/go-redis/redis/v7" // "_"为空导入
    "github.com/google/uuid" 
    "github.com/sirupsen/logrus" 
) 

func main() { 
    logrus.Println(uuid.NewString()) 
}

接下来的步骤就与添加兼容依赖一样,通过 go get 获取 redis 的 v7 版本:

md 复制代码
$go get github.com/go-redis/redis/v7 
go: downloading github.com/go-redis/redis/v7 v7.4.1

移除一个依赖

  • 首先,删除掉代码中对 redis 的空导入这一行
  • 其次,通过 go list 命令列出当前 module 的所有依赖,查看 go-redis/redis/v8 是否出现在结果中:
md 复制代码
$go list -m all
  • 最后,还得用 go mod tidy 命令,将这个依赖项彻底从 Go Module 构建上下文中清除掉。go mod tidy 会自动分析源码依赖,而且将不再使用的依赖从 go.mod 和 go.sum 中移除。
相关推荐
lypzcgf9 小时前
Coze源码分析-资源库-编辑知识库-后端源码-基础设施/存储层
系统架构·go·知识库·coze·coze源码分析·智能体平台·ai应用平台
hzulwy17 小时前
微服务注册与监听
微服务·云原生·架构·go
豆浆Whisky19 小时前
Go interface性能调优指南:避免常见陷阱的实用技巧|Go语言进阶(10)
后端·go
gopyer3 天前
180课时吃透Go语言游戏后端开发7:Go语言中的函数
开发语言·游戏·golang·go·函数
lypzcgf3 天前
Coze源码分析-资源库-编辑工作流-后端源码-流程/技术/总结
go·源码分析·工作流·coze·coze源码分析·ai应用平台·agent平台
Penge6665 天前
Go语言中的切片展开操作符 ...
后端·go
野木香5 天前
go语言websocket连接,重连,发心跳示例
websocket·go
豆浆whisky6 天前
netpoll性能调优:Go网络编程的隐藏利器|Go语言进阶(8)
开发语言·网络·后端·golang·go
豆浆Whisky6 天前
Go实现百万级连接:资源管控与性能平衡的艺术|Go语言进阶(9)
后端·go
CAir27 天前
CGO 原理
c++·go·cgo