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月前
|
网络协议 Linux Go
分享一个go开发的工具-SNMP Server
分享一个go开发的工具-SNMP Server
27 0
|
2月前
|
测试技术 API 开发者
【Docker项目实战】在Docker环境下部署go-file文件分享工具
【2月更文挑战第15天】在Docker环境下部署go-file文件分享工具
73 1
|
3月前
|
存储 Go C语言
如何用Go开发eBPF程序
【2月更文挑战第7天】
|
3天前
|
Kubernetes Cloud Native Go
Golang深入浅出之-Go语言中的云原生开发:Kubernetes与Docker
【5月更文挑战第5天】本文探讨了Go语言在云原生开发中的应用,特别是在Kubernetes和Docker中的使用。Docker利用Go语言的性能和跨平台能力编写Dockerfile和构建镜像。Kubernetes,主要由Go语言编写,提供了方便的客户端库与集群交互。文章列举了Dockerfile编写、Kubernetes资源定义和服务发现的常见问题及解决方案,并给出了Go语言构建Docker镜像和与Kubernetes交互的代码示例。通过掌握这些技巧,开发者能更高效地进行云原生应用开发。
38 1
|
8天前
|
存储 关系型数据库 Go
【Go语言专栏】基于Go语言的RESTful API开发
【4月更文挑战第30天】本文介绍了使用Go语言开发RESTful API的方法,涵盖了路由、请求处理、数据存储和测试关键点。RESTful API基于HTTP协议,无状态且使用标准方法表示操作。在Go中,通过第三方库如`gorilla/mux`进行路由映射,使用`net/http`处理请求,与数据库交互可选ORM库`gorm`,测试则依赖于Go内置的`testing`框架。Go的简洁性和并发性使得它成为构建高效API的理想选择。
|
19天前
|
前端开发 Java Go
开发语言详解(python、java、Go(Golong)。。。。)
开发语言详解(python、java、Go(Golong)。。。。)
|
20天前
|
Java Go C#
开发语言漫谈-go
go的设计思路和python差不多,就是要降低入门难度,提高开发效率
|
1月前
|
搜索推荐 Linux Go
分享一个go开发的端口转发工具-port-forward
分享一个go开发的端口转发工具-port-forward
28 0
|
1月前
|
Go
推荐一个go写的RTSP转直播工具
推荐一个go写的RTSP转直播工具
12 0
|
2月前
|
大数据 Java Go
Go语言在大数据处理中的核心技术与工具
【2月更文挑战第22天】本文深入探讨了Go语言在大数据处理领域的核心技术与工具。通过分析Go语言的并发编程模型、内存管理、标准库以及第三方工具库等方面,展现了其在大数据处理中的优势和实际应用。同时,本文也讨论了如何使用这些技术与工具构建高效、稳定的大数据处理系统,为开发者提供了有价值的参考。