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/ 我个人会更习惯用后者,要简洁一些。


相关文章
|
4天前
|
算法 测试技术 Go
Go 1.24.0 重磅发布:新特性、新工具,开发者必看!
`Go 1.24.0` 已正式发布,带来诸多改进和新特性。语言层面上,泛型类型别名现已被完全支持;性能方面,通过优化 `map` 实现和内存分配,减少了 2-3% 的 CPU 开销;工具链新增模块工具依赖跟踪及测试分析器;标准库增加了弱引用包、FIPS 140-3 合规机制等;WebAssembly 支持也得到了增强。快来下载体验吧!
73 7
|
6月前
|
缓存 弹性计算 API
用 Go 快速开发一个 RESTful API 服务
用 Go 快速开发一个 RESTful API 服务
|
2月前
|
开发框架 Go 计算机视觉
纯Go语言开发人脸检测、瞳孔/眼睛定位与面部特征检测插件-助力GoFly快速开发框架
开发纯go插件的原因是因为目前 Go 生态系统中几乎所有现有的人脸检测解决方案都是纯粹绑定到一些 C/C++ 库,如 OpenCV 或 dlib,但通过 cgo 调用 C 程序会引入巨大的延迟,并在性能方面产生显著的权衡。此外,在许多情况下,在各种平台上安装 OpenCV 是很麻烦的。使用纯Go开发的插件不仅在开发时方便,在项目部署和项目维护也能省很多时间精力。
|
3月前
|
Go 数据安全/隐私保护 开发者
Go语言开发
【10月更文挑战第26天】Go语言开发
54 3
|
3月前
|
Java 程序员 Go
Go语言的开发
【10月更文挑战第25天】Go语言的开发
47 3
|
3月前
|
JSON 监控 安全
go语言选择合适的工具和库
【10月更文挑战第17天】
26 2
|
6月前
|
JSON 中间件 Go
go语言后端开发学习(四) —— 在go项目中使用Zap日志库
本文详细介绍了如何在Go项目中集成并配置Zap日志库。首先通过`go get -u go.uber.org/zap`命令安装Zap,接着展示了`Logger`与`Sugared Logger`两种日志记录器的基本用法。随后深入探讨了Zap的高级配置,包括如何将日志输出至文件、调整时间格式、记录调用者信息以及日志分割等。最后,文章演示了如何在gin框架中集成Zap,通过自定义中间件实现了日志记录和异常恢复功能。通过这些步骤,读者可以掌握Zap在实际项目中的应用与定制方法
232 1
go语言后端开发学习(四) —— 在go项目中使用Zap日志库
|
6月前
|
算法 NoSQL 中间件
go语言后端开发学习(六) ——基于雪花算法生成用户ID
本文介绍了分布式ID生成中的Snowflake(雪花)算法。为解决用户ID安全性与唯一性问题,Snowflake算法生成的ID具备全局唯一性、递增性、高可用性和高性能性等特点。64位ID由符号位(固定为0)、41位时间戳、10位标识位(含数据中心与机器ID)及12位序列号组成。面对ID重复风险,可通过预分配、动态或统一分配标识位解决。Go语言实现示例展示了如何使用第三方包`sonyflake`生成ID,确保不同节点产生的ID始终唯一。
164 0
go语言后端开发学习(六) ——基于雪花算法生成用户ID
|
6月前
|
JSON 缓存 监控
go语言后端开发学习(五)——如何在项目中使用Viper来配置环境
Viper 是一个强大的 Go 语言配置管理库,适用于各类应用,包括 Twelve-Factor Apps。相比仅支持 `.ini` 格式的 `go-ini`,Viper 支持更多配置格式如 JSON、TOML、YAML
125 0
go语言后端开发学习(五)——如何在项目中使用Viper来配置环境
|
6月前
|
Kubernetes 数据可视化 Java