diff --git a/grconfig.go b/grconfig.go index 091dfcb..da479ff 100644 --- a/grconfig.go +++ b/grconfig.go @@ -85,11 +85,9 @@ func recursiveParse(item string, v interface{}) interface{} { if item == "" { return v } - chunks := strings.SplitN(item, ".", 2) if n, err := strconv.Atoi(chunks[0]); err == nil { - if tmp, ok := v.([]interface{}); reflect.TypeOf(v).Kind() == reflect.Slice && ok { v = tmp[n] } diff --git a/grconfig_test.go b/grconfig_test.go index 5d172ba..173e11b 100644 --- a/grconfig_test.go +++ b/grconfig_test.go @@ -36,4 +36,8 @@ func TestNew(t *testing.T) { var s string gr.Item("db.default.host", &s) fmt.Println("item形式解释符串:", s) + + // 根解释字符串 + fmt.Println("根解释字符串", gr.String("db")) + fmt.Println("二级解释字符串", gr.String("db.default")) } diff --git a/yaml.go b/yaml.go index 1db79b9..0a4e2fc 100644 --- a/yaml.go +++ b/yaml.go @@ -16,10 +16,21 @@ type ConfigerChannelYAML struct { func (conf *ConfigerChannelYAML) String(item string) string { chunks := strings.SplitN(item, ".", 2) - target := recursiveParse(chunks[1], conf.tmp) + var target interface{} + if len(chunks) > 1 { + target = recursiveParse(chunks[1], conf.tmp) + } else { + target = conf.tmp + } + if str, ok := target.(string); ok { return str + } else { + if out, err := yaml.Marshal(target); err == nil { + return bytes.NewBuffer(out).String() + } } + return "" }