From c768b4532faf14af20399d6895d81ae90c2bb4f9 Mon Sep 17 00:00:00 2001 From: Jes Cok Date: Fri, 16 Feb 2024 20:57:36 +0800 Subject: [PATCH] reflect: make Value.Comparable return true for nil interface value Fixes #65718 --- src/reflect/all_test.go | 6 ++++++ src/reflect/value.go | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/reflect/all_test.go b/src/reflect/all_test.go index e77537c9a5..d339769b9a 100644 --- a/src/reflect/all_test.go +++ b/src/reflect/all_test.go @@ -8024,6 +8024,7 @@ func TestValue_Len(t *testing.T) { } func TestValue_Comparable(t *testing.T) { + var iNil interface{} var a int var s []int var i interface{} = a @@ -8035,6 +8036,11 @@ func TestValue_Comparable(t *testing.T) { comparable bool deref bool }{ + { + ValueOf(&iNil).Elem(), + true, + false, + }, { ValueOf(32), true, diff --git a/src/reflect/value.go b/src/reflect/value.go index 60ba79a6e6..6cc1e7fad6 100644 --- a/src/reflect/value.go +++ b/src/reflect/value.go @@ -3413,7 +3413,7 @@ func (v Value) Comparable() bool { return v.Type().Comparable() case Interface: - return v.Elem().Comparable() + return v.IsNil() || v.Elem().Comparable() case Struct: for i := 0; i < v.NumField(); i++ {