1、github.com/fatih/structs
结构体的操作,转map[string]interface{}、判断零值等;
2、go.uber.org/multierr
合并错误信息;
3、github.com/spf13/viper
配置管理,支持Yaml、Json等格式的配置;2. 可以从文件、io、环境变量、command line中提取配置;支持自动转换的类型解析;可以远程从etcd中读取配置。(参考:Go 每日一库之 viper - Go语言中文网 - Golang中文社区)
4、github.com/spf13/cobra/cobra
Cobra是一个用来创建现代命令行应用的库,也是一个用来生成应用和命令文件的脚手架。
// 模拟实现docker ps功能
package main
import (
"fmt"
"context"
"github.com/docker/docker/api/types"
"github.com/docker/docker/client" // v1.13.1
"github.com/spf13/cobra"
)
func runPs(dockerCli *client.Client) {
containers, err := dockerCli.ContainerList(context.Background(), types.ContainerListOptions{})
if err != nil {
panic(err)
}
fmt.Println("运行中的容器ID:")
for _, container := range containers {
fmt.Printf("%s \n", container.ID[:10])
}
}
func main() {
dockerCli, _ := client.NewEnvClient()
// 定义ps命令
var cmdPs = &cobra.Command{
Use: "ps",
Short: "List containers",
Run: func(cmd *cobra.Command, args []string) {
runPs(dockerCli)
},
}
// 定义根命令
var rootCmd = &cobra.Command{Use: "play_docker"}
// 加入ps命令
rootCmd.AddCommand(cmdPs)
// 初始化cobra
rootCmd.Execute()
}
5、net/http/pprof
golang性能监控
6、github.com/jinzhu/copier
方便dto、vo、dao之间的相互转换
7、github.com/unknwon/com
一个小而美的工具包
8、github.com/astaxie/beego/validation
一个很好用的表单验证库
9、github.com/crossplane/crossplane-runtime/pkg/fieldpath
控制平面的k8s controller工具包
10、github.com/AlecAivazis/survey/v2
交互式cli的包
11、k8s/api
主要包括 内建资源对象的定义和注册
12、k8s/apimachinery
主要包括 客户端和服务端的公共库,包括TypeMeta,ObjectMeta,Scheme(type和GVK的映射),RestMapper(GVR和GVK的映射),encoding,decoding,版本转换等
13、github.com/olivere/elastic和github.com/elastic/go-elasticsearch
elasticsearch 使用 REST 接口的分布式搜索引擎,提供强大的全文搜索功能。
14、github.com/hashicorp/consul/api
consul是一个分布式高可用的Key-value存储系统(类似etcd和zookeeper),数据在consul中以KV格式存储,且有webui。
15、github.com/davecgh/go-spew/spew
格式化输出工具,
-
Dump() 标准输出到os.Stdout
-
Fdump() 允许输出到自定义io.Writer
-
Sdump() 输出的结果作为字符串返回
16、github.com/json-iterator/go
陶师傅的json序列化反序列包,只需要加一句就可以,提升2-3倍
var json = jsoniter.ConfigCompatibleWithStandardLibrary
err := json.Unmarshal(datautil.String2bytes(originData), &fieldMap)
17、github.com/spf13/viper
这是一个完整的 Go 应用程序配置解决方案,包括 12-Factor 应用程序。它专为在应用程序中工作而设计,可以处理所有类型的配置需求和格式。 该软件包的一些巧妙功能包括: 从 JSON、TOML、YAML、HCL、.env 和 Java 属性配置格式中读取;实时观看和重读配置文件;从环境变量中读取。
18、github.com/golang-module/carbon/v2
这是一个很棒的轻量级、易于使用且语义智能的日期时间库,适用于 Go 开发人员。
package main
import (
"fmt"
"github.com/golang-module/carbon/v2"
)
func main() {
// 时间日期
datetime := carbon.Now().ToDateTimeString()
fmt.Printf("datetime: %v\n", datetime)
// datetime: 2022-11-09 09:38:42
// 日期
date := carbon.Now().ToDateString()
fmt.Printf("date: %v\n", date)
// date: 2022-11-09
// 时间
time := carbon.Now().ToTimeString()
fmt.Printf("time: %v\n", time)
// time: 09:38:42
}
19、github.com/bytedance/sonic
高性能的json序列化和反序列化库,在泛型编解码、大数据量级场景下的性能比json-iterator更好
20、github.com/go-resty/resty/v2
resty
是 Go 语言的一个 HTTP client 库。resty
功能强大,特性丰富。它支持几乎所有的 HTTP 方法,并提供了简单易用的 API。
21、github.com/gorilla/mux
常用的http路由库
22、github.com/codegangsta/negroni
常用的go web中间件
23、github.com/elliotchance/pie
封装了对slice和map的常用操作,能满足工作中的大部分需求。比如计算切片的交集、差集;对切片中元素按条件过滤的Filter函数;对切片中元素进行数据转换的Each、Map函数等。
-----------------------------------------------------------
uber开源的高性能,无反射的日志库
2、jsoniter,github.com/json-iterator/go
无反射的json
的序列化与反序列化工具,相比encoding/json快6倍
3、github.com/panjf2000/ants
goroute池,可以有效控制协程数量,防止协程过多影响程序性能,源码只有1000行。
4、还有一些可以学习的库如go-redis
、go-sql-driver
、didi/gendry
、golang/groupcache
、olivere/elastic/v7