Parcourir la source

check nil for interface{}

Tao Wen il y a 7 ans
Parent
commit
ef3038593b
3 fichiers modifiés avec 15 ajouts et 4 suppressions
  1. 2 2
      feature_reflect_native.go
  2. 2 2
      type_tests/struct_test.go
  3. 11 0
      type_tests/type_test.go

+ 2 - 2
feature_reflect_native.go

@@ -599,7 +599,7 @@ type marshalerEncoder struct {
 
 func (encoder *marshalerEncoder) Encode(ptr unsafe.Pointer, stream *Stream) {
 	obj := encoder.valType.UnsafeIndirect(ptr)
-	if obj == nil {
+	if reflect2.IsNil(obj) {
 		stream.WriteNil()
 		return
 	}
@@ -623,7 +623,7 @@ type textMarshalerEncoder struct {
 
 func (encoder *textMarshalerEncoder) Encode(ptr unsafe.Pointer, stream *Stream) {
 	obj := encoder.valType.UnsafeIndirect(ptr)
-	if obj == nil {
+	if reflect2.IsNil(obj) {
 		stream.WriteNil()
 		return
 	}

+ 2 - 2
type_tests/struct_test.go

@@ -251,8 +251,8 @@ func init() {
 		})(nil),
 		(*struct {
 			TF1 struct {
-				F1 withTime
-				F2 *withTime
+				F2 int
+				F1 *withTime
 			}
 		})(nil),
 		(*DeeplyNested)(nil),

+ 11 - 0
type_tests/type_test.go

@@ -15,7 +15,18 @@ import (
 var testCases []interface{}
 var asymmetricTestCases [][2]interface{}
 
+type selectedSymmetricCase struct {
+	testCase interface{}
+}
+
 func Test_symmetric(t *testing.T) {
+	for _, testCase := range testCases {
+		selectedSymmetricCase, found := testCase.(selectedSymmetricCase)
+		if found {
+			testCases = []interface{}{selectedSymmetricCase.testCase}
+			break
+		}
+	}
 	for _, testCase := range testCases {
 		valType := reflect.TypeOf(testCase).Elem()
 		t.Run(valType.String(), func(t *testing.T) {