使用结构解析 YAML

2024-06-27

我创建了以下 YAML 文件来提供用户需要提供的一些配置:

Environments:
 sys1:
    models:
    - app-type: app1
      service-type: “fds"

    - app-type: app2
      service-type: “era”
 sys2:
    models:
    - app-type: app1
      service-type: “fds"

    - app-type: app2
      service-type: “era"

https://codebeautify.org/yaml-validator/cbb349ec https://codebeautify.org/yaml-validator/cbb349ec

我这里有:

  1. 一个环境(根)
  2. 环境包含 1..nsys
  3. Each sys包含 1..n 个具有关键应用程序类型的模型实例

现在我需要解析这个 YAML 文件,因此我尝试构建一个结构类型,例如:

type Environment struct {
    Environment [] sys
}

type sys struct{
    Models    []Properties
}

type Models struct{
    app-type     string      `yaml:"app-type"`
    service-type string      `yaml:"service-type"`
}

现在我尝试解析此 YAML,但收到索引超出范围的错误。

我的问题是:

1. Do I model the YAML correctly?
2. Do I model the struct correctly?

这是代码:

func main() {
    y := Environments{}

    err := yaml.Unmarshal([]byte(data), &y)
    if err != nil {
        log.Fatalf("error: %v", err)
    }
    fmt.Printf("%+v\n", y)
}

数据是yaml.file.


尝试这个:

package main

import (
    "fmt"
    "log"

    "gopkg.in/yaml.v2"
)

type Message struct {
    Environments map[string]models `yaml:"Environments"`
}
type models map[string][]Model
type Model struct {
    AppType     string `yaml:"app-type"`
    ServiceType string `yaml:"service-type"`
}

func main() {
    data := []byte(`
Environments:
 sys1:
    models:
    - app-type: app1
      service-type: fds
    - app-type: app2
      service-type: era
 sys2:
    models:
    - app-type: app1
      service-type: fds
    - app-type: app2
      service-type: era
`)
    y := Message{}

    err := yaml.Unmarshal([]byte(data), &y)
    if err != nil {
        log.Fatalf("error: %v", err)
    }
    fmt.Printf("%+v\n", y)

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用结构解析 YAML 的相关文章

  • golang mongodb (mgo) 没有插入文档

    我在使用 mgo 在 mongodb 中保存 golang 结构时遇到问题 type AN Track Log struct Id bson ObjectId bson id omitempty user session id str st
  • 如何在 Rails 上的 .yml 本地化文件中换行?

    我有一个带有一些本地化内容的 terms en yml 文件 例如 en devise registrations terms text This agreement was written in English US To the ext
  • GORM中的一对多递归关系

    我需要有一个Organization与父级有关系 像这样的事情 type Organization struct gorm Model Parent Organization gorm ForeignKey ParentId Name st
  • 如何在同一存储库中的 github 操作之间共享代码?

    假设我想要两个工作流程build yml and release yml在我的仓库中 第一个应该构建项目 假设使用 CMake 第二个应该构建项目并使用构建的二进制文件创建 GitHub 版本 项目构建代码在两个文件之间重复 如何在它们之间
  • bazel go_embed_data“无法嵌入”

    我将以下 bazel BUILD 配置为 gazelle name gazelle go embed data name static files srcs glob static package main var staticFS go
  • 为什么 Go 中的函数不能命名为“init”?

    所以 今天在编码时我发现创建一个名为init产生错误method init not found 但是当我将其重命名为startup一切都很好 init 这个词是为 Go 中的某些内部操作而保留的 还是我在这里遗漏了一些东西 是的 该功能in
  • Golang HTTP Post 错误:连接被拒绝

    我正在尝试向正在运行 PHP 应用程序的端口 8080 上的本地主机发送 post 请求 卷曲效果很好 curl data key asdf http localhost 8080 但在 Go 中我收到以下错误 Post http loca
  • Golang 有 libfaketime 替代品吗?

    我想自动化一些测试 我必须操纵系统时间来检查用 golang 编写的程序的身份验证行为 根据这个帖子 https stackoverflow com questions 36024872 libfaketime doesnt work wi
  • 如何通过map[string]interface{}递归迭代

    我遇到了一个问题 如何在附加条件下递归地迭代 map string interface 1 如果一个值是一个映射 递归调用该方法 2 如果一个值是一个数组 调用数组的方法 3 如果一个值不是一个映射 处理它 现在当方法尝试执行时doc th
  • golang中的Reader接口和Read方法

    我正在关注 golang 之旅 我被要求 实现一个 rot13Reader 它实现 io Reader 并从 io Reader 读取 通过将 ROT13 替换密码应用于所有字母字符来修改流 我首先将方法实现到 rot13Reader ty
  • 使用指针接收器调用函数的 Go 语法

    在Go中 如果我定义一个带有指针的函数作为接收者 它是否应该只允许从指针调用该函数 为什么从值本身调用这个函数就可以 并且有同样的效果 例如 在以下程序中 m1 reset 和 m2 reset 具有相同的效果 即使 m1 是一个值而 m2
  • Golang 使用 gomail.v2 实现多个收件人

    我通过 gomail v2 发送电子邮件的唯一方法是在 for 循环中对每封电子邮件使用 Send 函数 但我需要向其他电子邮件地址显示已发送相同的电子邮件 for recipient range os Args 3 mail SetAdd
  • yaml 引用“___”分隔 kubernetes 对象

    我有一个这样的文件 apiVersion apps v1 kind Deployment spec template metadata annotations checksum config include print Template B
  • 如何在多行而不是单行输出上打印 Linux 组名称

    我尝试过 getent group 命令 id Gn user 和一些 sed 组合 但我认为我无法实现 因此向其他程序员伸出援手 我希望能够打印此 groups abc123输出 abc123 devops 构建测试设计 预期输出 gro
  • 如何使用 glide golang 安装私有仓库

    我在用glide作为我的 golang 项目的包管理 我无法使用私有存储库glide get bezos gitlab com gomock 即使我提供了正确的凭据 它也会询问用户名和密码 但最终会抛出错误 请提出任何想法 这与glide或
  • 收集实时 GC 指标 - Golang

    Go 中是否有一种简单的方法来获取有关 GC 和堆大小的信息 以便将它们公开给监控仪表板 我查看了运行时包 但似乎没有任何东西可以做到这一点 理想情况下 这不需要任何开销 例如在分析模式下运行应用程序等 但应该做好生产准备 您可以使用GOD
  • C#中解析yaml流时如何保留注释?

    我正在使用 YamlDotNet 来读取和写入 yaml yaml 文件的内容首先加载到 YamlStream 中 并对文档进行处理和修改 文档处理完毕后 内容会写回到文件中 在此过程中 评论不会被保留 在我的项目中保留评论至关重要 例如
  • 如何在 Go 中正确编写 JVM AES/CFB8 加密

    我在 Kotlin 中编写了一个小测试 使用 Cipher 实例和算法 AES CFB8 NoPadding 来加密一些文本 Hello 我的世界的东西 我现在尝试在 Go 中做同样的事情 但是我无法产生相同的结果 我尝试过的所有不同方法总
  • Golang func main() 在除 main 之外的包中?

    在这种情况下 例如helloworld 包的名称是 main 还有一个func main 陈述 但我也看到过代码func main 这是在其他一些包中 然而 该代码似乎可以用作独立程序 那么拥有一个意味着什么func main 带有除以下之
  • 转到“this”关键字

    深入研究文档后 我找不到以下问题的答案 有什么理由反对使用this用于引用当前对象 如下例所示 type MyStruct struct someField string func this MyStruct getSomeField st

随机推荐