网站首页 > 开源技术 正文
越来越多的开发者现在已经转到Golang,但发现Golang生态不如Java、Python丰富,好多功能都需要重新造轮子。
随着时间的发展,许多Go语言爱好者已经开发并共享了许多Go框架和库。
这些库有不同的功能,为开发者提供了便利。
本文介绍了一些开源库的使用,文末放置了对应库的官方地址。
配置文件相关
- Viper:Viper是一个功能强大且灵活的配置库,它支持多种配置文件格式(如JSON、YAML、TOML等),并提供了许多便捷的方法来读取和设置配置项。
- Envconfig:Envconfig是一个轻量级的库,它通过环境变量来配置应用程序。它使用结构体标签定义配置项,并从环境变量中自动解析配置。
- INI:INI是一个简单的INI文件解析库,它允许你轻松地读取和写入INI格式的配置文件。
- go-config:go-config是一个模块化的配置库,它提供了一个统一的API来加载和管理配置。它支持多种配置源(如文件、环境变量、命令行参数等)。
- koanf:koanf是一个高性能的配置库,它支持多种配置文件格式,并提供了一套简单而强大的API来读取和设置配置项。
- confita:confita是一个简单而灵活的配置加载库,它支持多种配置源(如文件、环境变量、远程存储等),并提供了一组简洁的API来加载和访问配置。
命令行相关
- Cobra:Cobra是一个功能丰富的CLI库,提供了创建命令行工具所需的所有基本功能,包括子命令、标志、参数等。
- Kingpin:Kingpin是一个简单而灵活的CLI库,使用链式调用语法来定义命令行工具的命令、标志和参数。
- urfave/cli:urfave/cli是一个轻量级的CLI库,提供了简单而直观的API来构建命令行工具。
- cli:cli是一个简单而易用的CLI库,支持创建命令行工具所需的基本功能。
- pflag:pflag是一个命令行标志解析库,提供了对命令行参数的更强大和灵活的处理方式。、
环境变量相关
- os 包:Golang的标准库os包提供了访问和操作环境变量的功能。你可以使用os.Getenv()函数来获取特定环境变量的值,使用os.Setenv()函数来设置环境变量的值。
- godotenv:godotenv是一个简单而受欢迎的库,用于从.env文件加载环境变量。它可以轻松地将.env文件中定义的键值对加载到环境变量中。
- envconfig:envconfig是一个轻量级的库,用于通过结构体标签将环境变量绑定到Go结构体字段。它可以自动将环境变量的值解析为指定的类型,并将其赋给结构体字段。
- viper:前面提到的Viper库不仅可以处理配置文件,还可以从环境变量中读取配置。它提供了SetEnvPrefix()方法,可以设置环境变量的前缀,然后使用相同的键名在环境变量中查找配置。
自动化相关
- GoReleaser:GoReleaser是一个功能强大的构建和发布工具,专为Go应用程序设计。它可以自动化构建、打包和发布你的应用程序,支持生成各种平台和格式的二进制文件、Docker镜像等。
- Mage:Mage是一个简单而灵活的构建工具,使用Go代码来定义和执行构建任务。它提供了一种可读性高且易于维护的方式来编写构建脚本,可以轻松地定义任务、依赖关系和执行顺序。
- Task:Task是一个轻量级的构建工具,通过定义任务列表和任务脚本,实现自动化构建和部署。它支持并行执行任务、任务间的依赖关系、条件逻辑等特性。
- Makefile:虽然不是一个专门的库,但Makefile在Golang项目中被广泛使用来定义和执行构建任务。Makefile是一个传统的构建工具,可以通过编写Makefile规则来自动化构建过程。
动态编译相关
- plugin 包:plugin是Golang的标准库,提供了一种机制来动态地加载和使用插件代码。它允许你将代码编译为插件,并在运行时通过插件接口调用插件功能。
- go-plugin:go-plugin是一个用于构建可插拔应用程序的库,它提供了更高级的接口和功能,以简化插件的开发和管理。它基于plugin包,提供了更便捷的API和工具。
- yaegi:yaegi是一个Go语言的解释器,可以在运行时动态执行Go代码。它支持将Go代码解析、编译并立即执行,无需预先编译为二进制文件。
Web相关
- gin:gin是一个快速而灵活的HTTP Web框架,具有出色的性能和易用性。
- echo:echo是一个高性能、简单而易用的Web框架,专注于提供快速和最小化的开发体验。
- iris:iris是一个功能丰富、高性能的Web框架,具有强大的路由和中间件支持。
- beego:beego是一个全功能的Web框架,拥有强大的开发工具和丰富的生态系统。
- chi:chi是一个轻量级、可扩展的Web框架,具有强大的路由和中间件功能。
日期相关
- time 包:time是Golang的标准库,提供了用于处理日期、时间和时间间隔的功能。它包含了各种函数和方法,可以进行日期格式化、解析、计算等操作。
- dateparse:dateparse是一个简单而灵活的日期解析库,可以从字符串中解析出日期和时间。它支持多种日期格式,并且可以自动识别常见的日期和时间表示方式。
- carbon:carbon是一个强大而简单的日期时间处理库,提供了丰富的方法来处理日期和时间。它支持日期格式化、解析、计算、时区转换等功能。
- now:now是一个功能齐全的日期和时间处理库,具有简洁的API和易于使用的功能。它支持日期格式化、解析、计算、时区转换等操作。
数据库相关
- database/sql 包:database/sql 是Golang的标准库,提供了通用的接口来连接和操作关系型数据库(如MySQL、PostgreSQL等)。它支持执行SQL查询、事务处理、连接池管理等功能。
- gorm:gorm是一个功能强大的ORM(对象关系映射)库,提供了简单而灵活的API来操作关系型数据库。它支持多种数据库驱动,并提供了丰富的查询、关联、事务等功能。
- mongo-go-driver:mongo-go-driver是MongoDB官方提供的官方驱动程序,用于连接和操作MongoDB数据库。它提供了一套完整的API,支持文档存储、查询、索引、聚合等功能。
- redis:redis是一个快速的键值存储数据库,go-redis是与Redis交互的常用库。它提供了简单而强大的API,用于连接、查询和操作Redis数据库。
- dgraph:dgraph是一个分布式图数据库,提供了用于连接和操作dgraph的官方Golang客户端库。它支持复杂的图查询和事务处理等功能。
微服务相关
- Go Micro:Go Micro是一个用于构建微服务的框架,提供了服务发现、负载均衡、消息传递等功能。它支持多种传输协议和数据序列化方式。
- gRPC:gRPC是一个高性能的远程过程调用(RPC)框架,支持多种编程语言。它使用Protocol Buffers作为接口定义语言,并提供了强大的代码生成工具。
- kit:Go kit是一个轻量级的微服务工具集,提供了许多组件和工具,用于处理服务发现、负载均衡、日志记录等常见的微服务模式。
- Kratos:Kratos是Bilibili开源的微服务框架,基于Protobuf和HTTP协议,提供了服务注册、配置管理、调用链追踪等功能。
- nats:nats是一个轻量级、高性能的消息传递系统,可用于构建异步、分布式的微服务架构。
web爬虫
- colly:colly是一个简单而强大的Web爬虫框架,提供了便捷的API来构建爬虫应用程序。它支持高度定制化的请求、数据提取、并发控制等功能。
- goquery:goquery是一个类似于jQuery的选择器库,用于解析和查询HTML文档。它提供了一套简洁的API,可用于从HTML中提取信息。
- gocrawl:gocrawl是一个可扩展的分布式Web爬虫库,适用于大规模的爬取任务。它提供了灵活的配置选项和回调函数,可用于自定义爬取行为。
- pholcus:pholcus是一个开源的分布式爬虫软件,具有高度可配置和可扩展的特点。它提供了可视化的操作界面和强大的爬取功能。
自动重试
- retry:retry是一个简单而灵活的重试库,提供了多种重试策略和自定义选项。它可以用于任何需要重试的场景,如网络请求、数据库操作等。
- backoff:backoff是一个支持指数退避的重试库,根据指定的退避策略进行重试。它提供了可定制的参数,用于控制重试次数、退避时间等。
- go-retryablehttp:go-retryablehttp是一个HTTP客户端库,支持自动重试失败的HTTP请求。它提供了可配置的重试策略、错误判断和回调函数等功能。
- goretry:goretry是一个简单的重试库,提供了基本的重试功能,包括重试次数、重试间隔等设置。
优雅启停
- graceful:graceful是一个用于优雅地重启和停止HTTP服务器的库。它通过在新的子进程中启动新的服务器,然后平滑地切换流量,实现了零停机重启。
- air:air是一个热重载开发服务器,它可以在代码修改时自动重新编译和重启应用程序。它提供了实时的代码变更监测和自动构建功能,支持零停机重启。
- gin-bin:gin-bin是一个用于开发和部署Gin框架应用的工具,它支持零停机重启。它可以监控文件的变化并自动重新编译和重启应用程序。
定时任务
- time 包:time 是Golang的标准库,提供了基本的时间和定时功能。你可以使用time.NewTicker()函数创建一个定时器,然后使用time.Tick()函数或者time.After()函数获取定时触发的时间通道。
- cron:cron是一个基于时间表达式的定时任务调度库。它允许你定义和管理按照预定时间运行的任务,并支持秒级、分钟级、小时级等精确度的定时任务调度。
- go-cron:go-cron是一个简单易用的定时任务调度库,基于cron表达式来执行定时任务。它提供了简洁的API和灵活的任务配置选项。
- ticktock:ticktock是一个高性能的定时任务调度库,适用于大规模和高频率的定时任务场景。它支持并发执行任务,并提供了可靠的重试机制。
参考地址:
[1] https://github.com/spf13/viper
[2] https://github.com/kelseyhightower/envconfig
[3] https://golang.org/pkg/go/ini/
[4] https://github.com/jinzhu/configor
[5] https://github.com/knadh/koanf
[6] https://github.com/heetch/confita
[7] https://github.com/spf13/cobra
[8] https://github.com/alecthomas/kingpin
[9] https://github.com/urfave/cli
[10] https://github.com/go-ozzo/ozzo-cli
[11] https://github.com/spf13/pflag
[12] https://github.com/joho/godotenv
[13] https://github.com/kelseyhightower/envconfig
[14] https://github.com/goreleaser/goreleaser
[15] https://github.com/magefile/mage
[16] https://github.com/go-task/task
[17] https://www.gnu.org/software/make/manual/make.html
[18] https://golang.org/pkg/plugin/
[19] https://github.com/hashicorp/go-plugin
[20] https://github.com/traefik/yaegi
[21] https://github.com/gin-gonic/gin
[22] https://github.com/labstack/echo
[23] https://github.com/kataras/iris
[24] https://github.com/beego/beego
[25] https://github.com/go-chi/chi
[26] https://golang.org/pkg/time/
[27] https://github.com/araddon/dateparse
[28] https://github.com/golang-module/carbon
[29] https://github.com/jinzhu/now
[30] https://golang.org/pkg/database/sql/
[31] https://github.com/go-gorm/gorm
[32] https://github.com/mongodb/mongo-go-driver
[33] https://github.com/go-redis/redis
[34] https://github.com/dgraph-io/dgo
[35] https://github.com/asim/go-micro
[36] https://github.com/grpc/grpc-go
[37] https://github.com/go-kit/kit
[38] https://github.com/go-kratos/kratos
[39] https://github.com/nats-io/nats.go
[40] https://github.com/gocolly/colly
[41] https://github.com/PuerkitoBio/goquery
[42] https://github.com/PuerkitoBio/gocrawl
[43] https://github.com/henrylee2cn/pholcus
[44] https://github.com/avast/retry-go
[45] https://github.com/cenkalti/backoff
[46] https://github.com/hashicorp/go-retryablehttp
[47] https://github.com/kamilsk/retry
[48] https://github.com/tylerb/graceful
[49] https://github.com/cosmtrek/air
[50] https://github.com/davyxu/gin-bin
[51] https://golang.org/pkg/time/
[52] https://github.com/robfig/cron
[53] https://github.com/rk/go-cron
[54] https://github.com/robfig/ticktock
如果本文对你有用,点个赞吧!
猜你喜欢
- 2024-10-26 浅谈Kubernetes CRD和Operator的原理和使用方法
- 2024-10-26 笨办法学物联网之四:99个物联网动手实践项目
- 2024-10-26 Linux入门常用必会60个命令实例详解(一)
- 2024-10-26 Kubernetes任务调用Job与CronJob及源码分析
- 2024-10-26 linux 常用cron检测脚本(linux查询crontab)
- 2024-10-26 作业帮 K8s Serverless 虚拟节点大规模应用实践
- 2024-10-26 火山引擎 Redis 云原生实践(火山引擎app)
- 2024-10-26 当 GoLand 遇到 Kubernetes:如何调试和运行 Go 程序
- 2024-10-26 Go 每日一库之 jobrunner(github每日一题)
- 2024-10-26 golang cron 定时任务(go语言定时任务)
你 发表评论:
欢迎- 05-14WP8.1 GDR1的NTP时间同步没有解决问题
- 05-14抑郁症与焦虑症(四):补充色氨酸,5HTP的作用
- 05-14ntp服务器多久同步一次呢
- 05-14简单三步,轻松解决NVR时间不同步问题
- 05-14Linux的300+个真实运维场景——19 NTP 配置与管理
- 05-14海康威视录像机时间不准怎么办录像机无法查看回放录像,NTP校时
- 05-14安全加倍,解密极氪001电池安全技术
- 05-14海康威视录像机NTP服务器
- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)