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


目录
打赏
0
0
0
0
1
分享
相关文章
Go 网络编程:HTTP服务与客户端开发
Go 语言的 `net/http` 包功能强大,可快速构建高并发 HTTP 服务。本文从创建简单 HTTP 服务入手,逐步讲解请求与响应对象、URL 参数处理、自定义路由、JSON 接口、静态文件服务、中间件编写及 HTTPS 配置等内容。通过示例代码展示如何使用 `http.HandleFunc`、`http.ServeMux`、`http.Client` 等工具实现常见功能,帮助开发者掌握构建高效 Web 应用的核心技能。
160 61
Go开发遇见的一次Data Race
本文通过一段 Go 语言代码示例,分析了并发编程中的数据竞争(Data Race)问题。代码实现了一个带缓存的内存存储系统,包含 `LRUCache` 和 `MemoryCache` 两个核心组件。尽管在 `MemoryCache` 的 `Set` 方法中加了锁保护,但由于直接调用 `LRUCache` 的 `GetLength` 方法时未加锁,导致底层数据结构在多 goroutine 环境下被同时读写,从而触发 Data Race。文章详细解析了问题根源,并提出了解决方案:为 `LRUCache` 的 `Add` 方法添加锁保护,确保并发安全。
MCP 实战:用 Go 语言开发一个查询 IP 信息的 MCP 服务器
随着 MCP 的快速普及和广泛应用,MCP 服务器也层出不穷。大多数开发者使用的 MCP 服务器开发库是官方提供的 typescript-sdk,而作为 Go 开发者,我们也可以借助优秀的第三方库去开发 MCP 服务器,例如 ThinkInAIXYZ/go-mcp。 本文将详细介绍如何在 Go 语言中使用 go-mcp 库来开发一个查询 IP 信息的 MCP 服务器。
195 0
Go 1.24.0 重磅发布:新特性、新工具,开发者必看!
`Go 1.24.0` 已正式发布,带来诸多改进和新特性。语言层面上,泛型类型别名现已被完全支持;性能方面,通过优化 `map` 实现和内存分配,减少了 2-3% 的 CPU 开销;工具链新增模块工具依赖跟踪及测试分析器;标准库增加了弱引用包、FIPS 140-3 合规机制等;WebAssembly 支持也得到了增强。快来下载体验吧!
257 7
用 Go 快速开发一个 RESTful API 服务
用 Go 快速开发一个 RESTful API 服务
纯Go语言开发人脸检测、瞳孔/眼睛定位与面部特征检测插件-助力GoFly快速开发框架
开发纯go插件的原因是因为目前 Go 生态系统中几乎所有现有的人脸检测解决方案都是纯粹绑定到一些 C/C++ 库,如 OpenCV 或 dlib,但通过 cgo 调用 C 程序会引入巨大的延迟,并在性能方面产生显著的权衡。此外,在许多情况下,在各种平台上安装 OpenCV 是很麻烦的。使用纯Go开发的插件不仅在开发时方便,在项目部署和项目维护也能省很多时间精力。
176 5
Go语言开发
【10月更文挑战第26天】Go语言开发
100 3
|
8月前
|
Go语言的开发
【10月更文挑战第25天】Go语言的开发
98 3
go语言选择合适的工具和库
【10月更文挑战第17天】
87 2
go语言后端开发学习(四) —— 在go项目中使用Zap日志库
本文详细介绍了如何在Go项目中集成并配置Zap日志库。首先通过`go get -u go.uber.org/zap`命令安装Zap,接着展示了`Logger`与`Sugared Logger`两种日志记录器的基本用法。随后深入探讨了Zap的高级配置,包括如何将日志输出至文件、调整时间格式、记录调用者信息以及日志分割等。最后,文章演示了如何在gin框架中集成Zap,通过自定义中间件实现了日志记录和异常恢复功能。通过这些步骤,读者可以掌握Zap在实际项目中的应用与定制方法
435 1
go语言后端开发学习(四) —— 在go项目中使用Zap日志库
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等