问题描述
我有一个类似于以下内容的yaml文件:
ComplexItemList:
- Name: First Complex item
Date: Whenever
StructItemList:
- Name: blah
Data1: 0
Data2: Silly
- Name: Yaddah
Data1: 12
Data2: Blah-blah-blah
- Name: Second Complex item
Date: Yesterday
StructItemList:
- Name: blah
Data1: 0
Data2: Silly
- Name: Yaddah
Data1: 12
Data2: Blah-blah-blah
这是我的代码的简单版本:
package main
import (
"fmt"
"github.com/spf13/viper"
)
type StructItem struct {
Name string `yaml:"Name"`
Data1 int `yaml:"Data1"`
Data2 string `yaml:"Data2"`
}
type ComplexItem struct {
Name string `yaml:"Name"`
Date string `yaml:"Date"`
StructItemList []StructItem `yaml:"StructItemList,mapstructure"`
}
type TestConfig struct {
Version string `yaml:"Version"`
ComplexItemList []ComplexItem `yaml:"ComplexItemList,mapstructure"`
}
func main() {
viper.SetConfigName("simple1") // name of config file (without extension)
viper.SetConfigType("yaml") // REQUIRED if the config file does not have the extension in the name
viper.AddConfigPath(".")
err := viper.ReadInConfig() // Find and read the config file
if err != nil { // Handle errors reading the config file
panic(fmt.Errorf("Fatal error config file: %s \n",err))
}
test1 := viper.Get("ComplexItemList")
fmt.Printf("test1:\n%#v\n",test1)
// while I can easily unmarshal the information into a complex struct,// updating the file contents via viper does not seem straight forward.
// Is there a way to access a specific item in an array using viper dot notation?
config := TestConfig{}
viper.Unmarshal(&config)
// is the best way to update Data1 for "First Complex item",just to update the
// unmarshalled struct then write the whole thing back out?
}
我想使用Viper读取配置文件,但是不确定使用Get方法时如何区分“第一复杂项目”和“第二复杂项目”。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)