Преглед на файлове

fix: should not conflict on lower members (#3095)

Kevin Wan преди 2 години
родител
ревизия
07f03ebd0c
променени са 2 файла, в които са добавени 22 реда и са изтрити 0 реда
  1. 4 0
      core/conf/config.go
  2. 18 0
      core/conf/config_test.go

+ 4 - 0
core/conf/config.go

@@ -242,6 +242,10 @@ func buildStructFieldsInfo(tp reflect.Type) (*fieldInfo, error) {
 
 	for i := 0; i < tp.NumField(); i++ {
 		field := tp.Field(i)
+		if !field.IsExported() {
+			continue
+		}
+
 		name := getTagName(field)
 		lowerCaseName := toLowerCase(name)
 		ft := mapping.Deref(field.Type)

+ 18 - 0
core/conf/config_test.go

@@ -1040,6 +1040,24 @@ func TestLoadNamedFieldOverwritten(t *testing.T) {
 	})
 }
 
+func TestLoadLowerMemberShouldNotConflict(t *testing.T) {
+	type (
+		Redis struct {
+			db uint
+		}
+
+		Config struct {
+			db uint
+			Redis
+		}
+	)
+
+	var c Config
+	assert.NoError(t, LoadFromJsonBytes([]byte(`{}`), &c))
+	assert.Zero(t, c.db)
+	assert.Zero(t, c.Redis.db)
+}
+
 func TestFillDefaultUnmarshal(t *testing.T) {
 	t.Run("nil", func(t *testing.T) {
 		type St struct{}