我正在嘗試使用“gopkg.in/yaml.v3”包將 yaml 檔案決議為 go。我無法解決的問題是決議以 - 開頭的檔案。例如:
---
- type: people
info:
- { name: John, last: Doe }
...
所以當我嘗試決議這個
package main
import (
"fmt"
"io/ioutil"
"log"
"gopkg.in/yaml.v3"
)
type YamlFile struct {
type string `yaml:"type"`
}
func main() {
d := YamlFile{}
src, err := ioutil.ReadFile("test1.yaml")
if err != nil {
log.Println(err)
}
err = yaml.Unmarshal(src, &d)
if err != nil {
log.Printf("error: %v", err)
}
fmt.Println(d)
}
輸出: error: yaml: unmarshal errors: line 2: cannot unmarshal !!seq into main.YamlFile
當 - 從檔案中洗掉時,上面的代碼有效
---
type: people
info:
- { name: John, last: Doe }
...
但是,我無法重新格式化檔案,因此我需要知道在嘗試使用 - 進行決議時我做錯了什么。感謝您提供正確方向的任何指示。
uj5u.com熱心網友回復:
在-表明它是一個串列/陣列。因此,您必須在 Go 中將其解組為切片或陣列。
更改d := YamlFile{}為d := []YamlFile{},您將不再收到該錯誤。
但還要注意,您將始終使用您定義的結構獲得空結果,因為它沒有匯出欄位。
試試吧:
type YamlFile struct {
Type string `yaml:"type"`
}
在操場上看到它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/400766.html
上一篇:可以繞過Go模塊校驗和驗證嗎?
