登录
首页 >  Golang >  Go问答

GoLang yaml unmarshal - 更新结构

来源:stackoverflow

时间:2024-02-26 10:39:26 375浏览 收藏

怎么入门Golang编程?需要学习哪些知识点?这是新手们刚接触编程时常见的问题;下面golang学习网就来给大家整理分享一些知识点,希望能够给初学者一些帮助。本篇文章就来介绍《GoLang yaml unmarshal - 更新结构》,涉及到,有需要的可以收藏一下

问题内容

我使用 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

我不想强迫用户在实施更改后去更新 yaml 文件。如何解析这两个文件(新文件和旧文件)?例如,如果收到旧文件,我希望名称字段为空。如果收到新文件,我将接受所提供的任何内容。

谢谢!


正确答案


正确的方法是为 settings 的新结构发布软件包的v2。 v2 的用户可以使用新的结构,现有用户可以继续使用软件包 v1 的旧结构。

如果这是不可能的,那么另一种方法是将设置声明为空接口数组。

type Settings struct{
   Hosts []interface{}
}

yaml 将对此进行解析,您将在 hosts 字段中获取数据,如下所示

  1. 旧 yaml 的 string 数组
  2. 新 yaml 的 map[string]interface{} 数组

需要类型断言将其解析为新结构或旧结构。

注意主机的类型始终为 []interface{},它是需要断言其类型以填充字段的元素。

到这里,我们也就讲完了《GoLang yaml unmarshal - 更新结构》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>