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

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

configor ⭐️⭐️⭐️⭐️


github.com/jinzhu/conf… 是一个配置文件读取库,支持 YAML/JSON/TOML 等格式。


go-cache ⭐️⭐️⭐️


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


c := cache.New(5*time.Minute, 10*time.Minute)
  // Set the value of the key "foo" to "bar", with the default expiration time
  c.Set("foo", "bar", cache.DefaultExpiration)


copier ⭐️⭐️⭐️


github.com/jinzhu/copi… 看名字就知道这是一个数据复制的库,与 Java 中的 BeanUtils.copy() 类似;可以将两个字段相同但对象不同的  struct 进行数据复制,也支持深拷贝。


func Copy(toValue interface{}, fromValue interface{}) (err error) 


在我们需要一个临时 struct 来存放数据时很有用,特别是一个 struct 中字段非常多时,一个个来回赋值确实有点费手指。


但也要注意不要什么情况都使用,会带来一些弊端:


  • 当删除字段时,不能利用编译器提示。


  • 当一些字段需要额外人工处理时,代码不易阅读。


  • 反射赋值,有一定性能损耗。


总之在业务开发时,还是建议人工编写,毕竟代码是给人看的。


env ⭐️⭐️⭐️


github.com/caarlos0/en… 这个库可以将我们的环境变量转换为一个 struct.


type config struct {
  Home string `env:"HOME"`
}
func main() {
  cfg := config{}
  if err := env.Parse(&cfg); err != nil {
    fmt.Printf("%+v\n", err)
  }
  fmt.Printf("%+v\n", cfg)
}


这个在我们打包代码到不同的运行环境时非常有用,利用它可以方便的获取不同环境变量。


user_agent ⭐️⭐️⭐️


github.com/mssola/user… 是一个格式化 user-agent 的小工具。


当我们需要在服务端收集 user-agen 时可以更快的读取数据。


func main() {
    ua := user_agent.New("Mozilla/5.0 (Linux; U; Android 2.3.7; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1")
    fmt.Printf("%v\n", ua.Mobile())   // => true
    fmt.Printf("%v\n", ua.Bot())      // => false
    fmt.Printf("%v\n", ua.Mozilla())  // => "5.0"
    fmt.Printf("%v\n", ua.Model())    // => "Nexus One"
    fmt.Printf("%v\n", ua.Platform()) // => "Linux"
    fmt.Printf("%v\n", ua.OS()) 
    }


phonenumbers ⭐️⭐️⭐️


github.com/nyaruka/pho… 手机号码验证库,可以不用自己写正则表达式了。


// parse our phone number
num, err := phonenumbers.Parse("6502530000", "US")


基础工具


接下来是一些基础工具库,包含一些主流的存储的客户端、中间件等。


gomonkey ⭐️⭐️⭐️⭐️⭐️


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


由于它是修改了调用对应函数时机器跳转指令,而 CPU 架构的不同对应的指令也不同,所以在我们使用时还不兼容苹果的 M1 芯片,不过目前应该已经兼容了,大家可以试试。


goconvey ⭐️⭐️⭐️⭐️⭐️


github.com/smartystree… 也是配合单元测试的库,可以兼容 go test 命令。


  • 提供可视化 web UI。


  • 与 IDE 集成显示单元覆盖率。


网络异常,图片无法展示
|


dig ⭐️⭐️⭐️⭐️⭐️


github.com/uber-go/dig 这是一个依赖注入库,我们这里暂不讨论是否应该使用依赖注入,至少目前我们使用下来还是有几个好处:


  • 所有的对象都是单例。


  • 有一个统一的地方管理对象。


  • 使用时直接传递对象当做参数进来即可(容器会自动注入)。


当然也有一些不太方便的地方:


  • 不熟悉时,一个对象是如何创建的不清楚。


  • 代码不是很好理解。


我们内部有自己开发一个业务框架,其中所有的对象都交由 dig 进行管理,使用起来倒也是比较方便。


cobra ⭐️⭐️⭐️⭐️


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


相关文章
|
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) 通过性能分析、代码优化、缓存和压缩等手段进一步提升服务性能。掌握这些技术能帮助开发者构建更高效稳定的服务。