我正在使用viper进行配置。如何在不更换整个地图的情况下更换钥匙?
package main
import (
"log"
"github.com/spf13/viper"
)
type person struct {
First string
Last string
}
func main() {
v := viper.New()
v.SetEnvPrefix("mememe")
v.AutomaticEnv()
bob := person{
First: "Bob",
Last: "Smith",
}
john := person{
First: "John",
Last: "Boothe",
}
v.SetDefault("people.bob", bob)
v.SetDefault("people.john", john)
log.Println(v.Get("people")) // map[bob:{Bob Smith} john:{John Boothe}]
bob.Last = "Hope"
v.Set("people.bob", bob)
log.Println(v.Get("people")) // map[bob:{Bob Hope}]
}
在设置新Bob后,我完全失去了John。如果我将“SetDefault”更改为“Set”,那么它似乎有效,但我想知道为什么“SetDefault”不起作用。
答案 0 :(得分:0)
我猜这是因为这个,来自Accessing nested keys上的文档。
但是,如果datastore.metric被一个带有立即值的标志,环境变量,Set()方法,...)覆盖,那么datastore.metric的所有子键都将变为未定义,它们将被“遮蔽”通过更高优先级的配置级别。
因此,只要tr
设置,people.bob
就会存在,people
不再被视为无人居住。
我不知道如何解决它。