我在(我認為是)一個簡單的問題上遇到了麻煩。我正在嘗試使用 commando 創建一個 CLI,這個 CLI 將讀取一個配置 yaml,然后做一些事情。但是,我被困在 config.yaml 的決議中,以下是我的代碼:
type Config struct {
Apps map[string]App `yaml:"apps"`
Branch string `yaml:"branch"`
}
type App struct {
hostName string `yaml:"hostName"`
}
.
. //func main, and other standard stuff goes here
.
commando.
Register("read").
AddArgument("config", "read yaml file", "./config.yaml").
SetAction(
func(args map[string]commando.ArgValue, flags map[string]commando.FlagValue) {
//args["config"] equates to ./config.yaml and I will give that below
file, err := ioutil.ReadFile(args["config"].Value)
if err != nil {
log.Fatal(err)
}
var data2 Config
err3 := yaml.Unmarshal(file, &data2)
if err3 != nil {
log.Fatal(err3)
}
fmt.Printf("Ad demo?: %#v\n", data2.Apps["ad-demo"].hostName)
fmt.Printf("Data 2: %#v\n", data2)
})
commando.Parse(nil)
我的 config.yaml 如下:
apps:
ad-tag:
hostName: ad-tag1.krg.io
ad-demo:
hostName: demo1.krg.io
branch: KAT-3821
這在大多數情況下都有效。問題是以下列印:
Ad demo?: ""
Data 2: main.Config{Apps:map[string]main.App{"ad-demo":main.App{hostName:""}, "ad-tag":main.App{hostName:""}}, Branch:"KAT-3821"}
主機名作為一個空字串出現。
知道我做錯了什么嗎?我覺得這應該很簡單,但我一生都無法弄清楚我做錯了什么。
謝謝
uj5u.com熱心網友回復:
主機名應該被匯出,即大寫
type App struct {
HostName string `yaml:"hostName"`
}
如果您不匯出它,諸如yaml或 之類的包json將無法讀取該欄位并填充它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/383877.html
下一篇:用Java決議JSON多維陣列
