github gitee go开发 热门开源工具包

目录

  • 高性能go开发建议
  • 测试
  • 系统
  • 字符串
  • flag
  • 日志
  • reflect
  • 文件IO
  • math数字
  • runtime
  • 远程调用
  • 限流
  • 注册中心
  • 链路跟踪
  • 监控
  • 日期时间
  • Decimal
  • 配置
  • 缓存
  • 异常
  • 开发工具包
  • 调试工具
  • 分布式调度
  • Json
  • 网络
    • net/http
    • http client
    • websocket
    • ping
    • user_agent
  • 并发
    • sync 异步
    • channel
    • context
    • 异步并发
  • 数据库 存储
    • gorm
    • database/sql
    • mysql
    • redis
    • kafka
    • es
    • mongo
  • Web框架
  • 鉴权
  • 翻译
  • 数据结构
    • container/heap
    • container/list
  • 类型转换
    • strconv
  • 对象复制
  • 验证
  • 验证码
  • wechat(微信包)
  • Excel
  • Word
  • 图像
  • PDF
  • 参考文档

高性能go开发建议

(1)尽可能的使用:=去初始化声明一个变量(在函数内部)
(2)尽可能的使用字符代替字符串
(3)尽可能的使用切片代替数组
(4)尽可能的使用数组和切片代替映射(详见参考文献15);
(5)如果只想获取切片中某项值,不需要值的索引,尽可能的使用for range去遍历切片,这比必须查询切片中的每个元素要快一些
(6)当数组元素是稀疏的(例如有很多0值或者空值nil),使用映射会降低内存消耗
(7)初始化映射时指定其容量
(8)当定义一个方法时,使用指针类型作为方法的接受者
(9)在代码中使用常量或者标志提取常量的值
(10)尽可能在需要分配大量内存时使用缓存
(11)使用缓存模板

测试

testing

func Test(t *testing.T) {
}

monkey 单元测试

agiledragon/gomonkey 是一个 mock 打桩工具,当我们写单元测试时,需要对一些非接口函数进行 mock 会比较困难,这时就需要用到它了

cweill/gotests: 自动生成测试用例工具

系统

os包提供了与操作系统交互的函数,包括文件操作、进程管理、环境变量等功能

字符串

strings

strings.Contains(s, "f")
strings.ToUpper(item)

flag

flag包提供了解析命令行参数的功能,可以方便地获取用户输入的参数。

日志

fmt

fmt.Println(v)func fmt.Fprintln(w io.Writer, a ...invalid type) (n int, err error)
fmt.Fprintln(w, "hello, world")

log包
提供了日志记录的功能,可以方便地记录程序运行时的信息。

sirupsen/logrus
uber-go/zap

reflect

reflect包提供了反射的功能,可以在程序运行时动态地获取和修改对象的信息。

文件IO

io包
提供了读写数据的基本工具,大部分标准库中输入输出相关的包均依赖于此包。
bufio包
在 io 包的基础上提供更高级的读写缓冲

math数字

提供基本的数学常数和数学函数。

runtime

提供了与运行时系统进行交互的接口

远程调用

google.golang.org/grpc

限流

juju/ratelimit

注册中心

etcd / consult

链路跟踪

jaegertracing/jaeger

监控

prometheus

日期时间

time
time包提供了时间相关的函数,包括获取当前时间、时间格式化、时间操作等功能。

time.Sleep(1 * time.Second)

now 时间工具库

Decimal

精度计算

配置

jinzhu/configor 是一个配置文件读取库,支持 YAML /JSON/TOML 等格式。

spf13/viper: 兼容 json,toml,yaml,hcl 等格式的日志库

缓存

patrickmn/go-cache 是一个类似于 Java 中的 Guava cache ,线程安全,使用简单;不需要 分布式缓存 的简单场景可以考虑。

异常

pkg/errors:更强大的异常堆栈

开发工具包

caarlos0/env: 这个库可以将我们的 环境变量 转换为一个 struct

uber-go/dig: 一个依赖注入库
所有的对象都是单例。有一个统一的地方管理对象。使用时直接传递对象当做参数进来即可(容器会自动注入)。

spf13/cobra: 是一个功能强大的命令行工具库,我们用它来实现内部的命令行工具,同时也推荐使用 我个人会更习惯用后者,要简洁一些。

cascax/sql2gorm: 用于将 sql 语句转换为 golang 的 struct

silenceper/gowatch: 热编译工具

mgechev/revive: golang 代码质量检测工具

调试工具

[golang/perf: 代理工具,支持内存,cpu,堆栈查看,并支持火焰图.] Performance measurement, storage, and analysis.](https://github.com/golang/perf)

uber-archive/go-torch: 快捷定位程序问题

google/gops: A tool to list and diagnose Go processes currently running on your system

开发环境管理工具,单机搭建可移植工具的利器。支持多种虚拟机后端。类似于docker

轻量级容器调度工具 nomad 可以非常方便的管理容器和传统应用,相比 k8s 来说,简单不要太多.

敏感信息和密钥管理工具

高度可配置化的 http 转发工具,基于 etcd 配置。

进程监控工具 supervisor

基于procFile进程管理工具. 相比 supervisor 更加简单。

基于 http,https,websocket 的调试代理工具,配置功能丰富。在线教育的 nohost web 调试工具,基于此开发.

分布式调度

robfig/cron: a cron library for go

go-co-op/gocron: Easy and fluent Go cron scheduling

cronsun

gocron

hibiken/asynq: 分布式任务队列 保证至少执行一次任务 重试失败的任务 在工作进程崩溃时自动恢复任务 加权优先级队列 严格优先级队列

Json

json包
提供了JSON格式的编解码功能,可以方便地处理JSON数据。

type User struct{Name string `json:"name"`Age int `json:"age"`
}
user := {"zhangsan", 20}
// 实体转json
jsonStr, err = json.Marshal(user);
fmt.Printf("%s\n", jsonStr);myUser := User{}
// json转实体
myUser, err = json.Unmarshal(&jsonStr);
fmt.Printf("%v\n", myUser);

tidwall/gjson: 非常好用的json解析工具库

给你一个json结构的数据,能够将代码转换为对应的结构体,直接在代码中使用,这简直太方便~

网络

snail007/goproxy: Proxy是golang实现的高性能http,https,websocket,tcp,socks5代理服务器,支持内网穿透,链式代理,通讯加密,智能HTTP,SOCKS5代理,黑白名单,限速,限流量,限连接数,跨平台,KCP支持,认证API。

40t/go-sniffer: 可扩展的抓包工具,可以开发自定义协议的工具包 抓包截取项目中的数据库请求并解析成相应的语句。

ngrok反向代理工具,快捷开放内网端口供外部使用。

cloudflare/cfssl: 配置化生成证书 从根证书,到业务侧证书一键生成.

acmesh-official/acme.sh: 免费的证书获取工具 基于 acme 协议,从 letsencrypt 生成免费的证书,有效期 1 年,可自动续期。

net/http

func IndexHandler(w http.ResponseWriter, r *http.Request) {fmt.Fprintln(w, "hello, world. http: %s", r.URL.Path)
}func main() {http.HandleFunc("/", IndexHandler)http.ListenAndServe(":8080", nil)
}

http client

imroc/req
简单而强大:简单易用,提供丰富的客户端级和请求级设置,所有设置均为直观的链式方法。
go-resty/resty
GET、POST、PUT、DELETE、HEAD、PATCH、OPTIONS等简单且可链式调用的设置和请求方法

websocket

websocket包提供了WebSocket协议的支持,可以实现实时通信的功能。

ping

github.com/go-ping/ping
检测节点连通性,ping包,及其丢包率

user_agent

是一个格式化 user-agent 的小工具。当我们需要在服务端收集 user-agen 时可以更快的读取数据。

并发

sync 异步

sync/atomic 原子操作

// 原子操作版加函数
func atomicAdd() {atomic.AddInt64(&sumCount, 1)wg.Done()
}

sync.WaitGroup

var wg sync.WaitGroupfunc runTask(id int) {// 推出一个减去1defer wg.Done()fmt.Printf("task %d start..\n", id)time.Sleep(2 * time.Second)fmt.Printf("task %d complete\n", id)
}func asyncRun() {for i := 0; i < 10; i++ {go runTask(i + 1)// 没启动一个go routine 就+1wg.Add(1)}
}func main() {asyncRun()wg.Wait()
}

channel

channel包
Golang中的一种并发通信机制,可以实现协程之间的数据传递和同步。

context

context包
提供了上下文管理的功能,可以方便地控制并发协程的执行。

异步并发

tunny
goworker
async

数据库 存储

gorm

go-gorm/gorm: 一个功能齐全的 Golang 对象关系映射库

database/sql

database/sql包

mysql

mysql包
提供了MySQL数据库的支持,可以方便地进行MySQL数据库的操作。
xorm 对象关系映射库

redis

redis包
提供了Redis数据库的支持,可以方便地进行Redis数据库的操作。
redigo

kafka

sarama

es

olivere/elastic: 这也是一个非常成熟的 elasticsearch 库。
qax-os/ElasticHD: Elasticsearch 可视化DashBoard, 支持Es监控、实时搜索,Index template快捷替换修改,索引列表信息查看, SQL converts to DSL等

mongo

mongo-go-driver

Web框架

gin-gonic/gin: gin是一款轻量级的Web框架,具有高性能和易用性的特点,可以快速开发Web应用。

flipped-aurora/gin-vue-admin: 基于vite+vue3+gin搭建的开发基础平台(支持TS,JS混用),集成jwt鉴权,权限管理,动态路由,显隐可控组件,分页封装,多点登录拦截,资源权限,上传下载,代码生成器,表单生成器,chatGPT自动查表等开发必备功能。

xinliangnote/go-gin-api: 基于 Gin 进行模块化设计的 API 框架,封装了常用功能,使用简单,致力于进行快速的业务研发。比如,支持 cors 跨域、jwt 签名验证、zap 日志收集、panic 异常捕获、trace 链路追踪、prometheus 监控指标、swagger 文档生成、viper 配置文件解析、gorm 数据库组件、gormgen 代码生成工具、graphql 查询语言、errno 统一定义错误码、gRPC 的使用、cron 定时任务 等等。

beego
beego是一款全功能的Web框架,具有MVC架构、ORM、路由、缓存、Session等功能。
echo
echo是一款高性能的Web框架,具有路由、中间件、模板等功能,适合构建RESTful API。

鉴权

golang-jwt/jwt: 一个完整的JSON Web Token (JWT)实现。该库支持解析和验证,以及生成和签名JWT。

golang/oauth2: goauth2的后继者。通用OAuth 2.0包,提供JWT、Google APIs、Compute Engine和App Engine支持。

翻译

mozillazg/go-pinyin: 汉字转拼音

数据结构

container/heap

堆包

container/list

双向链表

gods

类型转换

strconv

strconv包提供了字符串和数字之间的转换功能,可以方便地进行类型转换。

strconv.Itoa(int(bytesLength / 1024))

spf13/cast: 不需要panic!在Go语言中进行类型转换易如反掌且安全。

chenhg5/collection: “Collection”为处理数据数组提供了一个流畅、方便的封装。你可以使用“Collect()”方法将一个map或者数组轻松地转换成一个Collection。然后,你可以使用Collection提供的强大而优雅的API来处理数据。

对象复制

jinzhu/copier: 一个数据复制的库,与 Java 中的 BeanUtils.copy() 类似;可以将两个字段相同但对象不同的 struct 进行数据复制,也支持深拷贝。

验证

thedevsaddam/govalidator: 使用简单规则验证Go语言的请求数据。受Laravel请求验证启发。

asaskevich/govalidator: 一个用于字符串、结构体和集合的验证器和过滤器包,基于validator.js。

go-ozzo/ozzo-validation: 提供可配置和可扩展的数据验证功能

验证码

TestsLing/aj-captcha-go: AJ-Captcha行为验证码的Go实现包

mojocn/base64Captcha: 图像验证码

wechat(微信包)

silenceper/wechat: WeChat SDK for Go (微信SDK:简单、易用)

go-pay/gopay: 微信、支付宝、通联支付、拉卡拉、PayPal、Apple 的Go版本SDK。【极简、易用的聚合支付SDK】

Excel

qax-os/excelize: 读取和写入XLAM / XLSM / XLSX / XLTM / XLTX文件。它支持读取和写入Microsoft Excel™ 2007及以上版本生成的电子表格文档。该库通过高度兼容性支持复杂的组件,并提供流式API,以从具有大量数据的工作表中生成或读取数据。此库需要 Go 版本1.16或更高版本。您可以使用go的内置文档工具查看完整文档,或在线查看 go.dev 和文档参考。

Word

unidoc/unioffice: 文档 (docx) [Word] 读/写/编辑 格式化 图片 表格 Word 转 PDF (docx to pdf) 电子表格 (xlsx) [Excel] 读/写/编辑

图像

disintegration/imaging: Package imaging 提供了基本的图像处理功能(如调整大小、旋转、裁剪、亮度/对比度调整等)。

fogleman/gg: gg是一个使用纯Go语言渲染2D图形的库。

PDF

signintech/gopdf: gopdf是一个用Go语言编写的生成PDF文档的简单库。

jung-kurt/gofpdf: gofpdf是一个实现了基于高级支持文本、绘图和图像的PDF文档生成器。

参考文档

utils: 基于Go Mod的Golang常用开发工具包utils,包括字符串处理、日期转换、类型转换、切片处理、压缩、加密等
go 语言工具包
实用工具 · Go语言
分享常用的GoLang包工具

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/53946.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P1052 [NOIP2005 提高组] 过河

[P1052 NOIP2005 提高组] 过河 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 问题描述&#xff1a;给定长度L&#xff0c;和一次可以跳动的长度 s 到 t&#xff0c;给定m个石头的位置&#xff0c;求最少经过多少个石头可以超过L。 思路&#xff1a;如果L很小的话&#xff0…

js中作用域的理解?

1.作用域 作用域&#xff0c;即变量(变量作用域又称上下文)和函数生效(能被访问)的区域或集合 换句话说&#xff0c;作用域决定了代码区块中变量和其他资源的可见性 举个例子 function myFunction() {let inVariable "函数内部变量"; } myFunction();//要先执行这…

网络安全在医疗行业中的重要性

不可否认&#xff0c;现代世界见证了技术和医疗行业的交织&#xff0c;塑造了我们诊断、治疗和管理健康状况的新方式。随着电子健康记录取代纸质文件&#xff0c;远程医疗缩短了患者和医疗服务提供者之间的距离&#xff0c;数字化转型既是福音&#xff0c;也是挑战。最近的全球…

Hightopo 使用心得(6)- 3D场景环境配置(天空球,雾化,辉光,景深)

在前一篇文章《Hightopo 使用心得&#xff08;5&#xff09;- 动画的实现》中&#xff0c;我们将一个直升机模型放到了3D场景中。同时&#xff0c;还利用动画实现了让该直升机围绕山体巡逻。在这篇文章中&#xff0c;我们将对上一篇的场景进行一些环境上的丰富与美化。让场景更…

html题库

什么是HTML? HTML的全称为 超文本标记语言 &#xff0c;是一种 标记语言 。 它包括一系列标签 &#xff0c;通过这些标签可以将网络上的文档格式统一&#xff0c;使分散的 Internet 资源连接为一个逻辑整体。 DOCTYPE 的作用是什么&#xff1f;标准模式与兼容模式&#xff08;…

【算法专题突破】双指针 - 复写零(2)

目录 1. 题目解析 2. 算法原理 3. 代码编写 写在最后&#xff1a; 1. 题目解析 题目链接&#xff1a;1089. 复写零 - 力扣&#xff08;Leetcode&#xff09; 我先来读题&#xff0c; 题目的意思非常的简单&#xff0c;其实就是&#xff0c; 遇到 0 就复制一个写进数组&a…

java从入门到起飞(五)——数组、集合

文章目录 Java数组什么是数组&#xff1f;声明和初始化数组访问数组元素数组长度遍历数组数组的常见操作多维数组访问多维数组元素 总结 Java集合框架介绍1. 什么是Java集合框架2. 集合的特点2.1 动态性2.2 类型安全2.3 高效性2.4 可扩展性 3. 集合的常用操作3.1 添加元素3.2 删…

主从、哨兵、集群模式有什么区别 ?

目录 1.Redis 多机部署的方式 2.主从、哨兵、集群模式有什么区别 2.1 主从同步 2.2 哨兵模式 2.3 集群模式 1.Redis 多机部署的方式 Redis 多机部署主要有 3 种方式&#xff1a; 1. 主从同步&#xff1a;主要存储数据的节点叫做主节点&#xff08;master&#xff09;&…

探秘工业设计的魅力:引领时尚潮流,打造个性空间

工业风格源自于上世纪初的工人阶级世界&#xff0c;几十年来一直充满诱惑力。它们由金属集合物&#xff0c;焊接、铆钉这些暴露在外的结构组建&#xff0c;融进了更多装饰性的曲线&#xff0c;再与素雅的色彩搭配形成&#xff1a;让我们来看看这种历史悠久的&#xff0c;在室内…

关于Springboot项目打包的配置问题

一、打包方式的不同致使jar包运行性能及docker部署的效率问题 1.1方式一 <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source&…

13,【设计模式】代理

代理 代理支持任意参数的简单代理实现 代理 代理的本质是函数指针 代理分为单播&#xff0c;多播&#xff0c;动态多播&#xff08;ue4中提出的&#xff09; 单播&#xff1a;在网络通信中&#xff0c;单播是一种一对一的通信方式 多播&#xff1a;在网络通信中&#xff0c;…

探索AIGC人工智能(Midjourney篇)(二)

文章目录 利用Midjourney进行LOGO设计 用ChatGPT和Midjourney的AI绘画&#xff0c;制作儿童绘本故事 探索Midjourney换脸艺术 添加InsightFaceSwap机器人 Midjourney打造专属动漫头像 ChatGPT Midjourney画一幅水墨画 Midjourney包装设计之美 Midjourney24节气海报插画…

GetX -从Get.Dialog返回值

GetMaterialApp 在main.dart中&#xff0c;确保MyApp返回的是GetMaterialApp而不是MaterialApp class MyApp extends StatelessWidget { // This widget is the root of your application. override Widget build(BuildContext context) { return GetMaterialApp( // <-- …

NSSCTF——Web题目1

目录 一、[LitCTF 2023]PHP是世界上最好的语言&#xff01;&#xff01; 二、[LitCTF 2023]Ping 三、[SWPUCTF 2021 新生赛]easyupload1.0 四、[SWPUCTF 2021 新生赛]easyupload2.0 五、[SWPUCTF 2021 新生赛]caidao 一、[LitCTF 2023]PHP是世界上最好的语言&#xff01;&a…

Github的使用指南

首次创建仓库 1.官网创建仓库 打开giuhub官网&#xff0c;右上角点击你的头像&#xff0c;随后点击your repositories 点击New开始创建仓库 如下图为创建仓库的选项解释 出现如下界面就可以进行后续的git指令操作了 2.git上传项目 进入需上传项目的所在目录&#xff0c;打开…

Android 之自定义绘制一

绘制的基本要素 onDraw(Canvas) 绘制方法 Canvas 绘制工具 Paint 调整风格 粗细等 坐标系: x y ,3D 会有z轴,x 左到右,y 上至下,与数学中y颠倒 尺寸单位: 布局中 dp ,sp ,代码中 px;dp 为了适配不同的尺寸 绘制的关键: draw(Canvas )......(关键类:Paint) Paint.ANTI_A…

ArrayList和Vector及LinkedList的区别

1.ArrayList和Vector的区别 第一句话&#xff1a;ArrayList和Vector底层都是数组实现的&#xff0c;初始容量都为10&#xff1b;在ArrayList的底层&#xff0c;是通过定义一个DEFAULT_CAPACITY的常量来指定的&#xff0c;而Vector的底层&#xff0c;是直接在空参构造中&#x…

LeetCode-227-基本计算器Ⅱ

题目描述&#xff1a; 给你一个字符串表达式 s &#xff0c;请你实现一个基本计算器来计算并返回它的值。 整数除法仅保留整数部分。 你可以假设给定的表达式总是有效的。所有中间结果将在 [-231, 231 - 1] 的范围内。 注意&#xff1a;不允许使用任何将字符串作为数学表达式计…

C语言易错知识点总结3

指针概念 第 1 题&#xff08;单选题&#xff09; 题目名称&#xff1a; 以下系统中&#xff0c;int类型占几个字节&#xff0c;指针占几个字节&#xff0c;操作系统可以使用的最大内存空间是多大&#xff1a;( ) 题目内容&#xff1a; A .32位下&#xff1a;4,4,2^32 64位下&a…

项目进度管理(4-1)关键链法

1 关键链法产生的背景 关键链法&#xff08;Critical Chain Method&#xff0c;CCM&#xff09;起源于20世纪80年代&#xff0c;是由Eliyahu M. Goldratt在他的著作《关键链》&#xff08;"Critical Chain"&#xff09;中首次提出和阐述的。Eliyahu M. Goldratt是以…