浏览代码

only unmashal public variables (#2872)

* only unmashal public variables

* only unmashal public variables

* only unmashal public variables

* only unmashal public variables
Mikael 2 年之前
父节点
当前提交
84f9863b63
共有 2 个文件被更改,包括 21 次插入0 次删除
  1. 3 0
      core/mapping/unmarshaler.go
  2. 18 0
      core/mapping/unmarshaler_test.go

+ 3 - 0
core/mapping/unmarshaler.go

@@ -853,6 +853,9 @@ func (u *Unmarshaler) unmarshalWithFullName(m valuerWithParent, v any, fullName
 
 	numFields := baseType.NumField()
 	for i := 0; i < numFields; i++ {
+		if !baseType.Field(i).IsExported() {
+			continue
+		}
 		if err := u.processField(baseType.Field(i), valElem.Field(i), m, fullName); err != nil {
 			return err
 		}

+ 18 - 0
core/mapping/unmarshaler_test.go

@@ -4265,6 +4265,24 @@ func TestUnmarshalStructPtrOfPtr(t *testing.T) {
 	}
 }
 
+func TestUnmarshalOnlyPublicVariables(t *testing.T) {
+	type demo struct {
+		age  int    `key:"age"`
+		Name string `key:"name"`
+	}
+
+	m := map[string]any{
+		"age":  3,
+		"name": "go-zero",
+	}
+
+	var in demo
+	if assert.NoError(t, UnmarshalKey(m, &in)) {
+		assert.Equal(t, 0, in.age)
+		assert.Equal(t, "go-zero", in.Name)
+	}
+}
+
 func BenchmarkDefaultValue(b *testing.B) {
 	for i := 0; i < b.N; i++ {
 		var a struct {