第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

如何取消封送一個(gè) yaml 數(shù)組?

如何取消封送一個(gè) yaml 數(shù)組?

Go
慕尼黑的夜晚無繁華 2022-09-19 17:33:22
我有下一個(gè)yaml,如果我在在線yaml網(wǎng)站上驗(yàn)證它,它說它是有效的:- {"foo": "1", "bar": "2"}然后,我編寫一個(gè)代碼來解析該值,并從這個(gè)yaml中分析如下:12測試.go:package mainimport "gopkg.in/yaml.v2"import "fmt"type Config struct {    Foo string    Bar string}type Configs struct {    Cfgs []Config `foobar`}func main() {    //var data = `    //  foobar:    //  - foo: 1    //    bar: 2    //`    var data = `      - foo: 1        bar: 2    `    source := []byte("foobar:" + data)    var configs Configs    err := yaml.Unmarshal(source, &configs)    if err != nil {        fmt.Println("error: %v", err)    }    fmt.Printf("--- configs:\n%v\n\n", configs)    fmt.Println(configs.Cfgs[0].Foo)    fmt.Println(configs.Cfgs[0].Bar)}它的工作原理如下:shubuntu1@shubuntu1:~/20210810$ go run test.go--- configs:{[{1 2}]}12怎么了?你可以看到我在這里做了一個(gè)解決方法,因?yàn)榻酉聛碓谠嫉膟aml之前添加特殊鍵,然后我可以用來取消封送:foobartype Configs struct從- foo: 1  bar: 2自foobar:- foo: 1  bar: 2因此,如果我不使用解決方法來添加前綴,我怎么能直接解析?foobar:- {"foo": 1, "bar": 2}
查看完整描述

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}]

試穿 - 去游樂場


查看完整回答
反對 回復(fù) 2022-09-19
?
GCT1015

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}]


查看完整回答
反對 回復(fù) 2022-09-19
  • 2 回答
  • 0 關(guān)注
  • 135 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號