2 回答

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超9個(gè)贊
由于您的數(shù)據(jù)是一個(gè)數(shù)組,因此請將其取消封送至結(jié)構(gòu)數(shù)組。YAMLConfig
package main
import (
"fmt"
"gopkg.in/yaml.v2"
)
type Config struct {
Foo string
Bar string
}
func main() {
var configs []Config
var data = `
- foo: 1
bar: 2
`
err := yaml.Unmarshal([]byte(data), &configs)
if err != nil {
panic(err)
}
fmt.Println(configs)
}
輸出:
[{1 2}]
試穿 - 去游樂場

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超4個(gè)贊
由于這個(gè)問題已經(jīng)得到回答,我想我可以在討論中添加一些東西:
var data = `
- foo: 1
bar: 2
`
此處的數(shù)據(jù)變量(即您編寫的方式)將包括每行開頭的縮進(jìn)。
這里的額外縮進(jìn)將與所有實(shí)際的 yaml 數(shù)據(jù)一起傳遞,這可能會把事情搞砸,因?yàn)?gofmt 將代碼格式化為使用 TAB 作為縮進(jìn),并且 yaml 中禁止 TAB 縮進(jìn)(https://stackoverflow.com/a/19976827/7509248)。yaml.Unmarshal()
如果您在 yaml 中使用 tab 作為縮進(jìn),則在嘗試取消封送時(shí)會引發(fā)這樣的錯(cuò)誤:
yaml: line 1: found a tab character that violates indentation
最好是從單獨(dú)的文件加載以避免此類問題。data
package main
import (
"fmt"
"io/ioutil"
"gopkg.in/yaml.v2"
)
type Config struct {
Foo string
Bar string
}
func main() {
var configs []Config
source, err := ioutil.ReadFile("config.yaml")
if err != nil {
fmt.Printf("failed reading config file: %v\n", err)
}
err = yaml.Unmarshal(source, &configs)
if err != nil {
fmt.Printf("error: %v\n", err)
}
fmt.Printf("config:\n%+v\n", configs)
}
config.yaml:
- foo: 1
bar: 2
輸出:
config:
[{Foo:1 Bar:2}]
- 2 回答
- 0 關(guān)注
- 135 瀏覽
添加回答
舉報(bào)