猿问

从 viper 配置文件中删除键值对

有没有办法从加载的配置文件中删除键/值对?

viper.Set("key", nil)

不起作用


拉丁的传说
浏览 143回答 2
2回答

弑天下

尝试delete(viper.Get("path.to.key").(map[string]interface{}), "key")例子:[backends]  [backends.setibe]    [backends.setibe.servers]      [backends.setibe.servers.server0]      url = "http://192.168.1.20:80"      weight = 1      [backends.setibe.servers.server1]      url = "http://192.168.1.21:80"      weight = 1删除“backends.setibe.servers.server1”delete(viper.Get("backends.setibe.servers").(map[string]interface{}), "server2")

眼眸繁星

以下内容:var rootCmd = &cobra.Command{    //...    PersistentPreRunE: writeConfig, //if --writeCfg, write viper config file and exit}func writeConfig(cmd *cobra.Command, args []string) error {    if !writeCfg {        return nil    }    cfg := viper.New()    for k, v := range viper.AllSettings() {        switch k {        case "writecfg", "config", "dryrun":            //do not propagate these        default:            //TODO: also check for zero values and exclude            cfg.Set(k, v)        }    }    if cfgFile == "" {        filename := "." + os.Args[0] + ".yaml"        home, err := os.UserHomeDir()        cobra.CheckErr(err)        cfgFile = filepath.Join(home, filename)    }    cfg.SetConfigFile(cfgFile)    var err error    if _, err = os.Stat(cfgFile); err != nil {        err = os.WriteFile(cfgFile, nil, 0644)        cobra.CheckErr(err)    }    err = cfg.WriteConfig()    cobra.CheckErr(err)    fmt.Println("config written successfully:")    f, err := os.Open(cfgFile)    cobra.CheckErr(err)    defer f.Close()    _, err = io.Copy(os.Stdout, f)    cobra.CheckErr(err)    os.Exit(0)    return nil //unreachable}
随时随地看视频慕课网APP

相关分类

Go
我要回答