简介

我们经常有深度比较两个 Object 是否相等的场景,比如:

  • 1 如服务重构,新旧服务回包对比;
  • 2 单测验证实际的返回值,标准库提供了 reflect.DeepEqual;

但是相对的,reflect.DeepEqual不够灵活,无法提供选项实现我们想要的行为,例如允许浮点数误差。所以今天的主角 go-cmp 登场了。 go-cmp 是 Google 开源的比较库,它提供了丰富的选项。最初定位是用在测试中。

1 快速使用

先安装:

go get -u github.com/google/go-cmp/cmp

Equal

Diff

总结

go-cmp 非常适合对两个同类型的值进行比较。源码中大量使用熟知的 Option 模式,提供给使用者简洁、一致的接口。这种设计思想也值得我们学习、借鉴。本文介绍了这是go-cmp的一部分内容,还有一些特性如过滤器感兴趣可自行探索。