From ca33b081ee746d1c8549f7da8ddfab0187231ef7 Mon Sep 17 00:00:00 2001 From: zufar Date: Mon, 17 Sep 2018 12:25:42 +0300 Subject: [PATCH] Add sub Viper instance List Close #566 --- viper.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/viper.go b/viper.go index 907a102..8d52e1a 100644 --- a/viper.go +++ b/viper.go @@ -664,6 +664,25 @@ func (v *Viper) Sub(key string) *Viper { return nil } +//Sub list returns new Viper instance List representing a sub tree of this instance. +func SubList(key string) []*Viper { return v.SubList(key) } +func (v *Viper) SubList(key string) []*Viper { + data := v.Get(key) + if data == nil { + return nil + } + var vList []*Viper + if reflect.TypeOf(data).Kind() == reflect.Slice { + for _, item := range data.([]interface{}) { + subv := New() + subv.config = cast.ToStringMap(item) + vList = append(vList, subv) + } + return vList + } + return nil +} + // GetString returns the value associated with the key as a string. func GetString(key string) string { return v.GetString(key) } func (v *Viper) GetString(key string) string {