Go 日常开发常备第三方库和工具(上)

简介: 重点和大家分享下我们日常开发中所使用到的一些第三方库与工具。这里我主要将这些库分为两类:业务开发基础工具开发

业务开发


首先是业务开发,主要包含了 web、数据库、Redis 等。


Gin ⭐️⭐️⭐️⭐️⭐️


首先是 Gin,一款 HTTP 框架,使用简单、性能优秀、资料众多;你还在犹豫选择哪款框架时,那就选择它吧,基本没错。


当然和它配套的 github.com/swaggo/gin-… swagger 工具也是刚需;利用它可以生成 swagger 文档。


GORM ⭐️⭐️⭐️⭐️⭐️


GORM 也没啥好说的,如果你喜欢 orm 的方式操作数据库,那就选它吧;同样的也是使用简单、资料较多。


如果有读写分离需求,也可以使用 GORM 官方提供的插件 github.com/go-gorm/dbr… ,配合 GORM 使用也是非常简单。


errors ⭐️⭐️⭐️⭐️⭐️


Go 语言自身提供的错误处理比较简单,github.com/pkg/errors 提供了更强大的功能,比如:


  • 包装异常


  • 包装堆栈等。


常用的有以下 API:


// WithMessagef annotates err with the format specifier.
func WithMessagef(err error, format string, args ...interface{}) error
// WithStack annotates err with a stack trace at the point WithStack was called.
func WithStack(err error) error


zorolog ⭐️⭐️⭐️⭐️⭐️


Go 里的日志打印库非常多,日志在日常开发中最好就是存在感低;也就是说性能强(不能影响到业务代码)、使用 API 简单。


"github.com/rs/zerolog/log"
log.Debug().Msgf("OrderID :%s", "12121")


excelize


github.com/qax-os/exce…是一个读写 Excel 的库,基本上你能遇到的 Excel 操作它都能实现。


now ⭐️⭐️⭐️⭐️


github.com/jinzhu/now 是一个时间工具库:


  • 获取当前的年月日、时分秒。


  • 不同时区支持。


  • 最后一周、最后一个月等。


import "github.com/jinzhu/now"
time.Now() // 2013-11-18 17:51:49.123456789 Mon
now.BeginningOfMinute()        // 2013-11-18 17:51:00 Mon
now.BeginningOfHour()          // 2013-11-18 17:00:00 Mon
now.BeginningOfDay()           // 2013-11-18 00:00:00 Mon
now.BeginningOfWeek()          // 2013-11-17 00:00:00 Sun
now.BeginningOfMonth()         // 2013-11-01 00:00:00 Fri
now.BeginningOfQuarter()       // 2013-10-01 00:00:00 Tue
now.BeginningOfYear()          // 2013-01-01 00:00:00 Tue
now.EndOfMinute()              // 2013-11-18 17:51:59.999999999 Mon
now.EndOfHour()                // 2013-11-18 17:59:59.999999999 Mon
now.EndOfDay()                 // 2013-11-18 23:59:59.999999999 Mon
now.EndOfWeek()                // 2013-11-23 23:59:59.999999999 Sat
now.EndOfMonth()               // 2013-11-30 23:59:59.999999999 Sat
now.EndOfQuarter()             // 2013-12-31 23:59:59.999999999 Tue
now.EndOfYear()                // 2013-12-31 23:59:59.999999999 Tue
now.WeekStartDay = time.Monday // Set Monday as first day, default is Sunday
now.EndOfWeek()                // 2013-11-24 23:59:59.999999999 Sun


Decimal ⭐️⭐️⭐️⭐️


当业务上需要精度计算时 github.com/shopspring/… 可以帮忙。


import (
  "fmt"
  "github.com/shopspring/decimal"
)
func main() {
  price, err := decimal.NewFromString("136.02")
  quantity := decimal.NewFromInt(3)
  fee, _ := decimal.NewFromString(".035")
  taxRate, _ := decimal.NewFromString(".08875")
  subtotal := price.Mul(quantity)
  preTax := subtotal.Mul(fee.Add(decimal.NewFromFloat(1)))
  total := preTax.Mul(taxRate.Add(decimal.NewFromFloat(1)))
  fmt.Println("Subtotal:", subtotal)                      // Subtotal: 408.06
  fmt.Println("Pre-tax:", preTax)                         // Pre-tax: 422.3421
  fmt.Println("Taxes:", total.Sub(preTax))                // Taxes: 37.482861375
  fmt.Println("Total:", total)                            // Total: 459.824961375
  fmt.Println("Tax rate:", total.Sub(preTax).Div(preTax)) // Tax rate: 0.08875
}


基本上你能想到的精度转换它都能做到;配合上 GORM 也可以将 model 字段声明为 decimal 的类型,数据库对应的也是 decimal ,这样使用起来时会更方便。


Amount decimal.Decimal `gorm:"column:amout;default:0.0000;NOT NULL" json:"amout"`



相关文章
|
2月前
|
网络协议 Linux Go
分享一个go开发的工具-SNMP Server
分享一个go开发的工具-SNMP Server
72 0
|
6天前
|
算法 网络协议 Linux
|
2月前
|
编译器 Go 索引
浅谈go语言中的符文字符处理工具
【5月更文挑战第20天】本文简述了Go 1.20之后的rune符文处理工具和函数,`unsafe`包新增了SliceData、String和StringData函数,支持直接将slice转换为array,明确了数组和结构体比较顺序。
35 1
浅谈go语言中的符文字符处理工具
|
26天前
|
中间件 Go
go语言后端开发学习(三)——基于validator包实现接口校验
go语言后端开发学习(三)——基于validator包实现接口校验
|
1月前
|
存储 前端开发 中间件
Go Web 开发 Demo【用户登录、注册、验证】(3)
Go Web 开发 Demo【用户登录、注册、验证】
|
1月前
|
前端开发 数据库连接 Go
Go Web 开发 Demo【用户登录、注册、验证】(1)
Go Web 开发 Demo【用户登录、注册、验证】
|
2月前
|
数据可视化 算法 Java
了解go语言运行时工具的作用
【5月更文挑战第16天】本文简介`runtime`库提供系统调用包装、执行跟踪、内存分配统计、运行时指标和剖析支持。`internal/syscall`封装系统调用,保证uintptr参数有效。`trace`用于执行跟踪,捕获各种事件,如goroutine活动、系统调用和GC事件。`ReadMemStats`提供内存分配器统计。`metrics`接口访问运行时定义的度量,包括CPU使用、GC和内存信息。`coverage`支持代码覆盖率分析,`cgo`处理C语言交互,`pprof`提供性能剖析工具集成。这些功能帮助优化和理解Go程序的运行行为。
42 6
|
26天前
|
存储 Go 开发工具
go语言后端开发学习(二)——基于七牛云实现的资源上传模块
go语言后端开发学习(二)——基于七牛云实现的资源上传模块
|
26天前
|
JSON 算法 Go
go语言后端开发学习(一)——JWT的介绍以及基于JWT实现登录验证
go语言后端开发学习(一)——JWT的介绍以及基于JWT实现登录验证
|
2月前
|
缓存 负载均衡 网络协议
使用Go语言开发高性能服务的深度解析
【5月更文挑战第21天】本文深入探讨了使用Go语言开发高性能服务的技巧,强调了Go的并发性能、内存管理和网络编程优势。关键点包括:1) 利用goroutine和channel进行并发处理,通过goroutine池优化资源;2) 注意内存管理,减少不必要的分配和释放,使用pprof分析;3) 使用非阻塞I/O和连接池提升网络性能,结合HTTP/2和负载均衡技术;4) 通过性能分析、代码优化、缓存和压缩等手段进一步提升服务性能。掌握这些技术能帮助开发者构建更高效稳定的服务。