From f9a856a8eb9ec21767726b5bb63c615086ed44eb Mon Sep 17 00:00:00 2001 From: levi chen Date: Fri, 8 May 2020 11:10:41 +0800 Subject: [PATCH 1/2] fix panic when continue using WatchRemoteConfig --- viper.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/viper.go b/viper.go index 5226090..8227b9b 100644 --- a/viper.go +++ b/viper.go @@ -1775,7 +1775,9 @@ func (v *Viper) watchKeyValueConfigOnChannel() error { for { b := <-rc reader := bytes.NewReader(b.Value) - v.unmarshalReader(reader, v.kvstore) + kvstore := make(map[string]interface{},len(v.kvstore)) + v.unmarshalReader(reader, kvstore) + v.kvstore = kvstore } }(respc) return nil @@ -1801,8 +1803,9 @@ func (v *Viper) watchRemoteConfig(provider RemoteProvider) (map[string]interface if err != nil { return nil, err } - err = v.unmarshalReader(reader, v.kvstore) - return v.kvstore, err + kvstore := make(map[string]interface{},len(v.kvstore)) + err = v.unmarshalReader(reader, kvstore) + return kvstore, err } // AllKeys returns all keys holding a value, regardless of where they are set. From b8bc81dfc78c0ee9438389aa41b6001ba4696ea6 Mon Sep 17 00:00:00 2001 From: levi chen Date: Fri, 8 May 2020 11:55:28 +0800 Subject: [PATCH 2/2] go fmt --- viper.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/viper.go b/viper.go index 8227b9b..9df0db5 100644 --- a/viper.go +++ b/viper.go @@ -1775,7 +1775,7 @@ func (v *Viper) watchKeyValueConfigOnChannel() error { for { b := <-rc reader := bytes.NewReader(b.Value) - kvstore := make(map[string]interface{},len(v.kvstore)) + kvstore := make(map[string]interface{}, len(v.kvstore)) v.unmarshalReader(reader, kvstore) v.kvstore = kvstore } @@ -1803,7 +1803,7 @@ func (v *Viper) watchRemoteConfig(provider RemoteProvider) (map[string]interface if err != nil { return nil, err } - kvstore := make(map[string]interface{},len(v.kvstore)) + kvstore := make(map[string]interface{}, len(v.kvstore)) err = v.unmarshalReader(reader, kvstore) return kvstore, err }