项目作者: hasSalil

项目描述 :
A re-implementation of the golang reflect.DeepEqual that allows registering of custom deep equal function for specified types. The custom deep equals works recursively when comparing structs
高级语言: Go
项目地址: git://github.com/hasSalil/customdeepequal.git
创建时间: 2017-04-01T00:02:10Z
项目社区:https://github.com/hasSalil/customdeepequal

开源协议:MIT License

下载


A Customizable DeepEqual implementation for golang

A re-implementation of reflect.DeepEqual that allows registering of custom deep equal function for specified types. The custom deep equals work recursively when comparing structs

Caution

This library’s DeepEqual method is reflection-based, and not efficient. It is therefore not suitable for use in production, and is intended for aid in unit testing and debugging.

Sample Usage

  1. customDeep := NewCustomDeepEquals()
  2. customDeep.RegisterEquivalenceForType(reflect.TypeOf(time.Now()), func(a, b unsafe.Pointer) bool {
  3. // Make sure to cast to pointer of the type registered in the first param
  4. aT := (*time.Time)(a)
  5. bT := (*time.Time)(b)
  6. return aT.Unix() == bT.Unix()
  7. })
  8. two := 2
  9. two2 := 2
  10. str := "sdgv"
  11. str2 := "sdgv"
  12. t1 := time.Date(2017, 4, 1, 0, 0, 0, 24534, time.UTC)
  13. t2 := time.Date(2017, 4, 1, 0, 0, 0, 33454, time.UTC)
  14. if customDeep.DeepEqual(&ctype{c: 1, d: &dtype{d: &two, t: &t1}, e: &[]byte{0, 1}, f: &str, t: &t1}, &ctype{c: 1, d: &dtype{d: &two2, t: &t2}, e: &[]byte{0, 1}, f: &str2, t: &t2}) {
  15. // do stuff...
  16. }