簡體   English   中英

GoLang yaml 解組 - 更新結構

[英]GoLang yaml unmarshal - updating structs

我使用https://github.com/go-yaml/yaml庫來解析 yaml 設置文件。 設置結構需要稍微改變。

當前結構是

type Settings struct{
   Hosts []string
}

新結構應該是

type Host struct {
   URL  string
   Name string
}
type Settings struct{
   Hosts []Host
}

當前 yaml:

hosts:
-http://server1.com
-http://server2.com

新的 yaml 將

hosts:
- url:http://server1.com
  name:s1
- url:http://server2.com
  name:s2

我不想強迫用戶使用 go 並在更改實施后更新 yaml 文件。 如何解析兩個文件(新舊)? 例如,如果收到舊文件,我希望名稱字段為空。 如果收到新文件,那么我將接受提供的任何內容。

謝謝!

正確的方法是發布您的 package v2以獲得Settings的新結構。 v2 的用戶可以使用新結構,現有用戶可以繼續使用 package v1 的舊結構。

如果這是不可能的,那么另一種方法是將設置聲明為空接口數組。

type Settings struct{
   Hosts []interface{}
}

yaml 將解析 ok,您將在 Hosts 字段中獲取數據

  1. 舊 yaml 的string數組
  2. 新 yaml 的map[string]interface{}數組

需要類型斷言來將其解析為新結構或舊結構。

請注意,Hosts 的類型將始終為[]interface{} ,它是需要聲明其類型以填充字段的元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM