首页 >后端开发 >Golang >go Lang load无法处理yaml文件

go Lang load无法处理yaml文件

王林
王林转载
2024-02-09 16:30:191303浏览

go Lang load无法处理yaml文件

php小编子墨发现,许多Go语言开发者在处理yaml文件时遇到了问题。尽管Go语言提供了load函数用于加载yaml文件,但是该函数却无法正确处理yaml文件的解析。这个问题导致了很多开发者在处理yaml文件时遇到了困难。那么,如何解决这个问题呢?在本文中,我们将为大家介绍一些解决方案,帮助开发者顺利处理yaml文件。

问题内容

我正在尝试读取 yaml 文件并将其存储在变量中,但由于某种原因,yaml 文件中的数组对象无法解组该文件。它显示空白数据。

下面是我的yaml文件内容

---
version: "1.2"

bunits:
  - name: buname
    bugroupid: asd
    bustgroupid: asd
  - name: buname2
    bugroupid: asd2
    bustgroupid: asd2

下面是正在使用的代码

type SResponse struct {
   Version       string         `json:"version"`
   BUnits []BUnit `json:"bUnits"`
}

type BUnit struct {
    Name                      string `json:"name"`
    BuUnitGroupID       string `json:"buGroupID"`
    BuUnitStGroupID string `json:"buStaticGroupID"`
}
func main() {

    _printf := fmt.Printf
    _printf("Start")
    var sListResponse SResponse

    source, err2 := ioutil.ReadFile("squads2.yml")

    if err2 != nil {
        _printf("Couldn't read yaml file.")
}

    err2 = yaml.Unmarshal(source, &sListResponse)
    if err2 != nil {
    _printf("Error")
    }

    _printf("Output: %s\n", sListResponse)
}

代码读取版本部分,但 bunits 数组为空。请提出建议。

解决方法

您的结构体用 json 标记进行装饰 - 您可能需要也可能不需要(取决于您稍后是否以 json 格式导出/导入此数据)。 但你手头的问题是 yaml 导入 - 所以你需要用 yaml 标签来装饰你的 struct 定义。

要支持 jsonyamlyaml 编组/解组,只需更新您的标签,如下所示:

type SResponse struct {
    Version string  `json:"version" yaml:"version"`
    BUnits  []BUnit `json:"bUnits" yaml:"bUnits"`
}

type BUnit struct {
    Name            string `json:"name" yaml:"name"`
    BuUnitGroupID   string `json:"buGroupID" yaml:"buGroupID"`
    BuUnitStGroupID string `json:"buStaticGroupID" yaml:"buStaticGroupID"`
}

或者如果您不需要 json 编码/解码,则只需删除 json 标签即可。

以上是go Lang load无法处理yaml文件的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文转载于:stackoverflow.com。如有侵权,请联系admin@php.cn删除