deepdiff
Diff deeply
Usages
deepdiff
DeepDiff can deeply print the differences about two objects.
delta, equal := evendeep.DeepDiff([]int{3, 0, 9}, []int{9, 3, 0}, diff.WithSliceOrderedComparison(true))
t.Logf("delta: %v", delta) // ""
delta, equal := evendeep.DeepDiff([]int{3, 0}, []int{9, 3, 0}, diff.WithSliceOrderedComparison(true))
t.Logf("delta: %v", delta) // "added: [0] = 9\n"
delta, equal := evendeep.DeepDiff([]int{3, 0}, []int{9, 3, 0})
t.Logf("delta: %v", delta)
// Outputs:
// added: [2] = <zero>
// modified: [0] = 9 (int) (Old: 3)
// modified: [1] = 3 (int) (Old: <zero>)DeepDiff is a rewrote version
upon [d4l3k/messagediff](d4l3k/messagediff at v1.2.1 (github.com)). This new
code enables user-defined comparer for you.
Ignored Names
diff.WithIgnoredFields(names...) can give a list of
names which should be ignored when comparing.
Slice-Order Insensitive
In normal mode, diff is slice-order-sensitive, that means, [1, 2] != [2, 1]
. WithSliceOrderedComparison(b bool) can unmind the
differences of order and as an equal.
Customizing Comparer
For example, evendeep ships a timeComparer:
type timeComparer struct{}
func (c *timeComparer) Match(typ reflect.Type) bool {
return typ.String() == "time.Time"
}
func (c *timeComparer) Equal(ctx Context, lhs, rhs reflect.Value, path Path) (equal bool) {
aTime := lhs.Interface().(time.Time)
bTime := rhs.Interface().(time.Time)
if equal = aTime.Equal(bTime); !equal {
ctx.PutModified(ctx.PutPath(path), Update{Old: aTime.String(), New: bTime.String(), Typ: typfmtlite(&lhs)})
}
return
}And it has been initialized into diff info struct. timeComparer provides a semantic comparing for time.Time objects.
To enable your comparer,
use diff.WithComparer(comparer).
What is Next?
How is this guide?
最后更新于