]> Cypherpunks repositories - gostls13.git/commitdiff
reflect: document how DeepEqual handles cycles
authorIan Lance Taylor <iant@golang.org>
Thu, 3 Aug 2017 00:52:06 +0000 (17:52 -0700)
committerIan Lance Taylor <iant@golang.org>
Fri, 4 Aug 2017 22:22:03 +0000 (22:22 +0000)
Fixes #20428

Change-Id: Ia450e615728efd4ccb6e42117b547cac162f13a3
Reviewed-on: https://go-review.googlesource.com/52931
Reviewed-by: Joe Tsai <thebrokentoaster@gmail.com>
src/reflect/deepequal.go

index f3fd7043e5acef020430c780c4abff90979fecdc..2fdd6a3d82ba35b31326d9a28c4bb23333d3eb8d 100644 (file)
@@ -178,6 +178,12 @@ func deepValueEqual(v1, v2 Value, visited map[visit]bool, depth int) bool {
 // DeepEqual has been defined so that the same short-cut applies
 // to slices and maps: if x and y are the same slice or the same map,
 // they are deeply equal regardless of content.
+//
+// As DeepEqual traverses the data values it may find a cycle. The
+// second and subsequent times that DeepEqual compares two pointer
+// values that have been compared before, it treats the values as
+// equal rather than examining the values to which they point.
+// This ensures that DeepEqual terminates.
 func DeepEqual(x, y interface{}) bool {
        if x == nil || y == nil {
                return x == y