数据操作相关
包 | 简介 |
---|---|
strings | 字符串操作 |
strconv | 字符串类型转换 |
time | 时间测量及显示 |
math | 数学函数、随机数 |
container | 数据结构 |
regexp | 正则表达式 |
bytes | 字节操作 |
hash | hash函数 |
index | 字符串搜索 |
sort | 排序 |
text | 文本操作 |
cmp | 比较值相等 |
iter | 迭代器 |
maps | map操作 |
slices | 切片操作 |
structs | 结构体 |
unique | 相同的值在内存中只存一次 |
IO、编码相关
包 | 简介 |
---|---|
archive | 打包 |
compress | 压缩 |
encoding | 编码,json等 |
crypto | 加密 |
fmt | 标准IO |
io | IO接口、实用工具 |
bufio | 缓冲区IO |
os | 操作系统函数,读文件等 |
database | 数据库驱动 |
flag | 命令行参数解析 |
html | html转译 数据驱动模板 |
mime | 电子邮件 |
image | 图像操作 |
net | 网络,http、rpc等实现 |
path | 斜杠分割路径 |
expvar | 公共变量 |
unicode | unicode处理 |
log | 日志 |
控制、调试相关
包 | 简介 |
---|---|
builtin | 基础数据类型、基础函数,不需要导入 |
reflect | 反射 |
unsafe | 直接操作内存 |
weak | 弱引用,不阻止内存回收 |
arena | 手动管理内存 |
context | 协程上下文 |
errors | 错误处理 |
sync | 同步单元 |
runtime | 运行时信息,debug profile |
debug | 读取调试信息、解析Go符号表等 |
embed | 编译时将资源文件一起打包 |
plugin | 动态模块加载 |
syscall | 系统调用 |
testing | 测试工具 |
第三方库
包 | 简介 |
---|---|
Gin | Web框架,RESTful |
Fiber | Web框架,基于Fasthttp,高性能 |
Gorilla MUX | HTTP路由管理 |
istio | 服务网格 |
go-zero | 微服务组件 |
go-kit | 微服务组件 |
GORM | ORM(对象关系映射)库 |
Cobra | 命令行工具,替代内置包flag |
Viper | 读取配置 |
Logrus | 日志库 |
testify | 测试框架 |
GoConvey | 测试框架 |
包管理
创建项目
> go mod init awesomeProject
会自动创建 go.mod 文件
module awesomeProject
go 1.24.3
创建代码文件 main.go
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
// 创建默认的 gin 引擎
r := gin.Default()
// 定义一个简单的路由
r.GET("/", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"message": "Hello, Gin!",
})
})
// 启动服务器
err := r.Run(":8080")
if err != nil {
return
}
}
构建并运行
> go mod tidy
更新 go.mod 依赖项,会根据代码中的 import 下载并引入依赖包,并移除不需要的包
go.mod 示例
module awesomeProject2
go 1.24.3
require github.com/gin-gonic/gin v1.10.1
require (
github.com/bytedance/sonic v1.13.3 // indirect
github.com/bytedance/sonic/loader v0.2.4 // indirect
)
> go build
构建,生成可执行文件
vendor
> go mod vendor
将第三方依赖包存入工程中的vendor目录,go build会优先从vendor中查找依赖项。更新vendor目录需要重复执行指令。
依赖包版本
版本格式为 v(major).(minor).(patch),比如 v1.2.3。
一般认为,major版本更新不向后兼容,minor版本更新向后兼容,而 import 会区分major版本,比如
import "github.com/pelletier/go-toml/v2"
即一个项目可以同时使用一个依赖包的两个版本。
go mod tidy 版本选择:
- 直接依赖包,即代码中 import 的包,会选择该major版本的最新小版本
- 间接依赖包,即 import 的包依赖的其他包,会选择最高的显式依赖版本,比如,B依赖D的 1.0.0,C依赖D的1.2.3,则D选择1.2.3
更新版本:
> go get -u
更新minor版本,比如 v1.2.3 更新到 v1.3.1
> go get -u=patch
只更新patch版本,比如 v1.2.3 更新到 v1.2.5
查看可更新列表:
> go list -u -m all
replace:
替换依赖库,比如原库不存在,或者修复原库的bug,可在 go.mod 中使用 replace 替换
replace example.com/theirmodule v1.2.3 => example.com/myfork/theirmodule v1.2.3-fixed
exclude:
排除依赖库,可用于排除间接依赖但实际不会被加载的包
exclude example.com/theirmodule v1.3.0