go 常用开源库汇总
2022-07-14
go 常用开源库列表
选择的项目都是知名的有大量开发者使用的,满足以下条件
- 500 星以上,fork 百次以上
- 长期更新这个列表的项目情况,方便查找
项目名 | 简介 | 文档地址 | 项目地址 | Star | Fork |
---|---|---|---|---|---|
gorm | orm 数据库访问 | 文档 | https://github.com/go-gorm/gorm | 28.9k | 3.2k |
gin | golang 开发的高性能 web 框架 | 文档 | https://github.com/gin-gonic/gin | 61k | 6.8k |
lo | 处理数组、map等集合数据的算法库 | 文档 | https://github.com/samber/lo | 6.8k | 263 |
viper | 配置文件处理的库, 支持各种格式、远程本地的配置文件 | 文档 | https://github.com/spf13/viper | 19.9k | 1.7k |
Loki | 轻量级日志收集系统,替换ELK | 文档 | https://github.com/grafana/loki | 16.5k | 2.1k |
Prometheus | Prometheus 是一款基于时序数据库的开源系统 | 文档 | https://github.com/prometheus/prometheus | 43.4k | 7.3k |
swaggo | Swagger 自动生成api接口文档 | 文档 | https://github.com/swaggo/swag | 6.4k | 864 |
jaeper | uber 开源的分布式链路追踪系统的 golang 客户端 | 文档 | https://github.com/jaegertracing/jaeger-client-go | 1.3k | 280 |
lumberjack | lumberjack是一个日志滚动记录器 | 文档 | https://github.com/natefinch/lumberjack | 3.4k | 446 |
zap | uber 开源的日志库 | 文档 | https://github.com/uber-go/zap | 16.4k | 1.2k |
go 常用开源库具体功能介绍
Gin Web框架
功能
安装
go get -u github.com/gin-gonic/gin
快速入门
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
:= gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"message": "pong",
})
})
r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")
}
Gorm 介绍
功能
- 全功能 ORM
- 关联 (Has One,Has Many,Belongs To,Many To Many,多态,单表继承)
- Create,Save,Update,Delete,Find 中钩子方法
- 支持 Preload、Joins 的预加载
- 事务,嵌套事务,Save Point,Rollback To Saved Point
- Context、预编译模式、DryRun 模式
- 批量插入,FindInBatches,Find/Create with Map,使用 SQL 表达式、Context Valuer 进行 CRUD
- SQL 构建器,Upsert,数据库锁,Optimizer/Index/Comment Hint,命名参数,子查询
- 复合主键,索引,约束
- Auto Migration
- 自定义 Logger
- 灵活的可扩展插件 API:Database Resolver(多数据库,读写分离)、Prometheus…
安装
go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite
快速入门
package main
import (
"gorm.io/gorm"
"gorm.io/driver/sqlite"
)
type Product struct {
gorm.Model
Code string
Price uint
}
func main() {
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
if err != nil {
panic("failed to connect database")
}
// 迁移 schema
db.AutoMigrate(&Product{})
// Create
db.Create(&Product{Code: "D42", Price: 100})
// Read
var product Product
db.First(&product, 1) // 根据整型主键查找
db.First(&product, "code = ?", "D42") // 查找 code 字段值为 D42 的记录
// Update - 将 product 的 price 更新为 200
db.Model(&product).Update("Price", 200)
// Update - 更新多个字段
db.Model(&product).Updates(Product{Price: 200, Code: "F42"}) // 仅更新非零值字段
db.Model(&product).Updates(map[string]interface{}{"Price": 200, "Code": "F42"})
// Delete - 删除 product
db.Delete(&product, 1)
}
viper 介绍
功能
- go 配置文件解决方案,被设计支持所有类型的配置文件
- 可以读区 JSON, TOML, YAML, HCL, envfile 等类型配置文件
- 检查配置文件的变化,重新加载配置
- 从环境变量、命令行读区配置
- 从内存 buffer 读区配置
- 从分布式配置系统 etcd、consul 读取配置
安装
go get github.com/spf13/viper
快速入门
package main
import (
"flag"
"github.com/spf13/pflag"
)
func main() {
// using standard library "flag" package
flag.Int("flagname", 1234, "help message for flagname")
pflag.CommandLine.AddGoFlagSet(flag.CommandLine)
pflag.Parse()
viper.BindPFlags(pflag.CommandLine)
i := viper.GetInt("flagname") // retrieve value from viper
// ...
}
Loki 介绍
Loki 是一套水平扩展、高可用、多租户日志聚合系统,它受到 Prometheus 的启发。它被设计非常有效率,而且很容易去使用。它没有创建全文索引,根据标签进行构建聚合
功能
- 不创建全文索引,数据压缩存储、解析日志创建 metadata 索引,使用简单、成本低
- 索引和日志组使用与 Prometheus 一样的标签,在日志和 metric 之间切换很简单
- 特别适合 K8S 的 POD 日志,POD 标签的metadata 自动被获取和索引
- Grafana 原生支持(Grafana v6.0 以后)
组件
- Promtail:日志收集器,类似Filebeat,收集日志文件的日志,把收集到的数据推送到Loki存储
- Loki:聚合并存储日志数据,作为Grafana的数据源,为Grafana提供可视化数据
- Grafana:从Loki中获取日志数据,进行可视化展示
Prometheus 介绍
Prometheus 是一款基于时序数据库的开源系统、服务监控告警系统。它按照一定时间间隔采集配置的目标的指标,按照配置的规则评估、显示结果。通过设置的观察条件来触发告警
功能
- 支持多维数据模型, 由度量名和键值对组成的时间序列数据
- 内置时间序列数据库TSDB
- 支持PromQL查询语言,可以完成复杂的查询和分析
- 使用 HTTP Pull 方式收集时间序列数据
- 通过内部网关来支持批量的采集任务
- 支持服务发现和静态配置两种方式发现目标
- 支持多种模式的图形、仪表盘展示
- 支持接入Grafana 进行丰富的监控指标展示