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

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

Golang 中處理多個(gè)錯(cuò)誤的最佳實(shí)踐

Golang 中處理多個(gè)錯(cuò)誤的最佳實(shí)踐

Go
慕標(biāo)5832272 2023-04-17 16:27:44
我正在編寫一些代碼來(lái)解析 YAML 文件并驗(yàn)證其中的數(shù)據(jù)。如果找到的值不符合要求,每個(gè)解析器都會(huì)返回一個(gè)錯(cuò)誤?,F(xiàn)在我正在創(chuàng)建一個(gè)錯(cuò)誤數(shù)組,并將每次調(diào)用的返回設(shè)置為數(shù)組中的不同索引。我當(dāng)前的實(shí)現(xiàn)是有效的,但它似乎是錯(cuò)誤的,我想看看是否有更好的方法來(lái)實(shí)現(xiàn)這一點(diǎn)。這是一個(gè)例子func createStruct(yamlMap map[interface{}]interface{}) (myStruct, error) {    errs := make([]error, 6)    s := myStruct{}    s.Name, errs[0] = getString(yamlMap, "name", true)    s.Tag, errs[1] = getIntValidRange(yamlMap, "tag", 1, 4094, true)    s.TaggedPorts, errs[2] = getStringPortList(yamlMap, "tagged_ports", true)    s.UntaggedPorts, errs[3] = getStringPortList(yamlMap, "untagged_ports", true)    s.IP, errs[4] = getIPString(yamlMap, "ip", true)    s.Netmask, errs[5] = getIPString(yamlMap, "netmask", true)    return s, structCreateErrorChecker(errs)}我不在每個(gè)函數(shù)之后處理每個(gè)錯(cuò)誤的原因是因?yàn)槲蚁胂葒L試解析所有內(nèi)容,然后收集所有錯(cuò)誤并記錄它們。這就是 structCreateErrorChecker() 所做的。這是我試圖解析的 YAML(它出現(xiàn)在評(píng)論中)。當(dāng)我說(shuō)動(dòng)態(tài)時(shí),我的意思是可以有任意數(shù)量的這些 controlling_bridge 部分,每個(gè) vlan 部分可以有任意數(shù)量的 vlan。controlling_bridge_1:    ip:    "1.1.1.1"    ports: ["1","2"]    vlans:        vlan01:            name:  "vlan1"            tag:   1001            ports: ["1"]            ip:    "2.2.2.2"        vlan02:            name:  "vlan02"            tag:   1002            ports: ["3", "4"]            ip:    "3.3.3.1"controlling_bridge_2:    ip:    "1.1.1.1"    ports: ["1","2"]    vlans:        vlan01:            name:  "vlan1"            tag:   1001            ports: ["1"]            ip:    "2.2.2.2"        vlan02:            name:  "vlan02"            tag:   1002            ports: ["3", "4"]            ip:    "3.3.3.1"
查看完整描述

1 回答

?
翻翻過(guò)去那場(chǎng)雪

TA貢獻(xiàn)2065條經(jīng)驗(yàn) 獲得超14個(gè)贊

沒有官方的 yaml 庫(kù),但是gopkg.in/yaml.v2是一個(gè)不錯(cuò)的選擇。要解組給定的 yaml,您可以定義結(jié)構(gòu)并將 yaml 標(biāo)簽添加到屬性中。


通過(guò)為網(wǎng)橋和 vlan 使用映射并為端口使用數(shù)組,您可以毫無(wú)問(wèn)題地解組數(shù)據(jù)。


當(dāng)您使用地圖時(shí),請(qǐng)記住迭代地圖并不能保證返回元素的順序。


該程序?qū)⒔饨M您給定的結(jié)構(gòu):


package main


import (

    "fmt"

    "log"


    yaml "gopkg.in/yaml.v2"

)


var data = `

controlling_bridge_1:

    ip:    "1.1.1.1"

    ports: ["1","2"]

    vlans:

        vlan01:

            name:  "vlan1"

            tag:   1001

            ports: ["1"]

            ip:    "2.2.2.2"

        vlan02:

            name:  "vlan02"

            tag:   1002

            ports: ["3", "4"]

            ip:    "3.3.3.1"


controlling_bridge_2:

    ip:    "1.1.1.1"

    ports: ["1","2"]

    vlans:

        vlan01:

            name:  "vlan1"

            tag:   1001

            ports: ["1"]

            ip:    "2.2.2.2"

        vlan02:

            name:  "vlan02"

            tag:   1002

            ports: ["3", "4"]

            ip:    "3.3.3.1"

`


type Bridge struct {

    IP    string   `yaml:"ip"`

    Ports []string `yaml:"ports"`

    Vlans map[string]Vlan

}


type Vlan struct {

    Name  string   `yaml:"name"`

    Tag   string   `yaml:"tag"`

    Ports []string `yaml:"ports"`

    IP    string   `yaml:"ip"`

}


func main() {

    bridges := map[string]Bridge{}


    err := yaml.Unmarshal([]byte(data), &bridges)

    if err != nil {

        log.Fatalf("error: %v", err)

    }


    fmt.Printf("%+v\n", bridges)

}



查看完整回答
反對(duì) 回復(fù) 2023-04-17
  • 1 回答
  • 0 關(guān)注
  • 129 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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