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

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

Unmarshal YAML 文件 - 如何將前導(dǎo)零作為字符串讀取 YAML 參數(shù)?

Unmarshal YAML 文件 - 如何將前導(dǎo)零作為字符串讀取 YAML 參數(shù)?

Go
守候你守候我 2022-08-15 16:35:46
如何在沒有任何轉(zhuǎn)換的情況下將前導(dǎo)零作為字符串讀取YAML屬性?YAML 示例文件:provisioning:  devices:     000000001515:        properties:           example: 30s        options:          dummy: trueGolang Code - 最小可重現(xiàn)性示例:package mainimport (    "fmt"    "github.com/ghodss/yaml")//DeviceSpec devicetype DeviceSpec struct {    Properties map[string]string `yaml:"properties,omitempty"`    Options    map[string]string `yaml:"options,omitempty"`}//Spec provisitype Spec struct {    Provisioning struct {        Devices map[string]DeviceSpec `yaml:"devices,omitempty"`    }}var input = []byte(`provisioning:  devices:     000000001515:        properties:           example: 30s        options:          dummy: true`)func main() {   config := Spec{}   if err := yaml.Unmarshal(input, &config); err != nil {        panic(err)   }   for uuid, _ := range config.Provisioning.Devices {      fmt.Println(uuid)   }}輸出845預(yù)期輸出000000001515溶液?jiǎn)栴}與我使用的 YAML 包有關(guān)。用軟件包替換它解決了問題,它工作得很好 - 請(qǐng)參閱下面的評(píng)論部分 - 謝謝大家。"github.com/ghodss/yaml" v1.0.0"gopkg.in/yaml.v3"import (    "fmt"    "gopkg.in/yaml.v3")
查看完整描述

1 回答

?
天涯盡頭無女友

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

現(xiàn)在我們發(fā)現(xiàn)了錯(cuò)誤,讓我們對(duì)發(fā)生的事情進(jìn)行事后分析:

你使用的庫,github.com/ghodss/yaml,說

這個(gè)庫首先使用go-yaml將YAML轉(zhuǎn)換為JSON,然后使用json。元帥和json。取消元帥以轉(zhuǎn)換為結(jié)構(gòu)或從結(jié)構(gòu)轉(zhuǎn)換。

關(guān)于為什么這是一個(gè)好主意的鏈接博客文章消失了,這并沒有特別有幫助。無論如何,讓我們看看那里的代碼實(shí)際上做了什么

var yamlObj interface{}
err := yamlUnmarshal(y, &yamlObj)

因此,它采用您的 YAML 輸入并將其加載到接口中。當(dāng)您實(shí)際提供目標(biāo)類型時(shí),這是一個(gè)主意。這里發(fā)生的事情是,go-yaml可以自由選擇目標(biāo)類型,如果是這樣,它顯然以數(shù)字形式讀取,前導(dǎo)零作為八進(jìn)制數(shù)。這符合過時(shí)的定義??!YAML 1.1 的 int 標(biāo)記

[-+]?0[0-7_]+ # (base 8)

但是,它早已被YAML 1.2所取代

 0o [0-7]+   tag:yaml.org,2002:int (Base 8)

go-yaml似乎實(shí)現(xiàn)了YAML 1.1規(guī)則。這似乎是一個(gè)糟糕的決定,可能是偶然完成的,可能需要一個(gè)問題報(bào)告。

因此,無論如何,當(dāng)加載 YAML 時(shí),該值將被解釋為八進(jìn)制值。github.com/ghodss/yaml 繼續(xù)將值分解為JSON,然后再次將其取消元帥,但我們已經(jīng)輸了。

結(jié)論是,我認(rèn)為 github.com/ghodss/yaml 有害的,并建議不要使用它。


查看完整回答
反對(duì) 回復(fù) 2022-08-15
  • 1 回答
  • 0 關(guān)注
  • 139 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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