From cf4e3e3d3b3a713ec4df7e995d5bf5caef045a09 Mon Sep 17 00:00:00 2001 From: Joe Tsai Date: Sat, 12 Jun 2021 12:25:12 -0700 Subject: [PATCH] reflect: explain why convertible or comparable types may still panic Conversions of slices to arrays may panic since the slice is too short. Comparibility of interfaces may panic since the underlying value is incomparable. This is a follow-up to CL 301652 Change-Id: Ia5d84a6e556a7b82c39add4be93ed7463e63cc8d Reviewed-on: https://go-review.googlesource.com/c/go/+/327589 Trust: Joe Tsai Trust: Joe Tsai Run-TryBot: Joe Tsai TryBot-Result: Go Bot Reviewed-by: Josh Bleecher Snyder Reviewed-by: Ian Lance Taylor Reviewed-by: Katie Hockman Reviewed-by: Matthew Dempsky --- src/reflect/type.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/reflect/type.go b/src/reflect/type.go index 39414fc2a64..df863ae106f 100644 --- a/src/reflect/type.go +++ b/src/reflect/type.go @@ -107,10 +107,14 @@ type Type interface { // ConvertibleTo reports whether a value of the type is convertible to type u. // Even if ConvertibleTo returns true, the conversion may still panic. + // For example, a slice of type []T is convertible to *[N]T, + // but the conversion will panic if its length is less than N. ConvertibleTo(u Type) bool // Comparable reports whether values of this type are comparable. // Even if Comparable returns true, the comparison may still panic. + // For example, values of interface type are comparable, + // but the comparison will panic if their dynamic type is not comparable. Comparable() bool // Methods applicable only to some types, depending on Kind.