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


相关文章
|
1月前
|
测试技术 API 开发者
【Docker项目实战】在Docker环境下部署go-file文件分享工具
【2月更文挑战第15天】在Docker环境下部署go-file文件分享工具
67 1
|
2月前
|
存储 Go C语言
如何用Go开发eBPF程序
【2月更文挑战第7天】
|
2月前
|
开发框架 安全 中间件
Go语言开发小技巧&易错点100例(十二)
Go语言开发小技巧&易错点100例(十二)
29 1
|
5天前
|
前端开发 Java Go
开发语言详解(python、java、Go(Golong)。。。。)
开发语言详解(python、java、Go(Golong)。。。。)
|
1月前
|
大数据 Java Go
Go语言在大数据处理中的核心技术与工具
【2月更文挑战第22天】本文深入探讨了Go语言在大数据处理领域的核心技术与工具。通过分析Go语言的并发编程模型、内存管理、标准库以及第三方工具库等方面,展现了其在大数据处理中的优势和实际应用。同时,本文也讨论了如何使用这些技术与工具构建高效、稳定的大数据处理系统,为开发者提供了有价值的参考。
|
1月前
|
JSON Go API
Go语言网络编程:HTTP客户端开发实战
【2月更文挑战第12天】本文将深入探讨使用Go语言开发HTTP客户端的技术细节,包括发送GET和POST请求、处理响应、错误处理、设置请求头、使用Cookie等方面。通过实例演示和代码解析,帮助读者掌握构建高效、可靠的HTTP客户端的关键技术。
|
2月前
|
设计模式 测试技术 Go
Go 项目必备:Wire 依赖注入工具的深度解析与实战应用
在现代软件开发中,依赖注入(Dependency Injection,简称 DI)已经成为一种广泛采用的设计模式。它的核心思想是通过外部定义的方式,将组件之间的依赖关系解耦,从而提高代码的可维护性、可扩展性和可测试性。然而,随着项目规模的增长,手动管理复杂的依赖关系变得日益困难。这时,依赖注入代码生成工具就显得尤为重要。在众多工具中,Wire 以其简洁、强大和易用性脱颖而出,成为 Go 语言项目中的宠儿。本文将带你深入了解 Wire 的安装、基本使用、核心概念以及高级用法,并通过一个实际的 web 博客项目示例,展示如何利用 Wire 简化依赖注入的实现。准备好了吗?让我们开始这场代码解耦的奇
|
2月前
|
Go
Go语言开发小技巧&易错点100例(十一)
Go语言开发小技巧&易错点100例(十一)
16 0
|
2月前
|
存储 Java Go
Go语言开发小技巧&易错点100例(十)
Go语言开发小技巧&易错点100例(十)
19 0
|
2月前
|
Go 开发者
Go语言开发小技巧&易错点100例(九)
Go语言开发小技巧&易错点100例(九)
15 0

热门文章

最新文章