You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用gopkg.in/yaml.v3解析带短横线的YAML序列时出错

解决gopkg.in/yaml.v3解析带短横线的嵌套序列问题

你的问题核心是YAML结构与Go结构体类型不匹配:

错误原因

看你提供的YAML,server_groups是一个嵌套序列(序列里再包含序列):

server_groups:
  - [r1, r2, r3]  # 这里的短横线表示server_groups是一个数组,数组的每个元素又是一个字符串序列

但你在Go结构体里把ServerGroups定义为[]string(一维字符串数组),yaml.v3无法将一个序列(!!seq)解析为单个字符串,因此抛出cannot unmarshal !!seq into string错误。

修正方案

把ServerGroups的类型改为[][]string(二维字符串数组),匹配YAML的嵌套序列结构:

修正后的完整代码:

package main

import (
    "fmt"
    "os"

    "gopkg.in/yaml.v3"
)

type S struct {
    Servers []struct {
        ServerName   string     `yaml:"server_name"`
        ServerGroups [][]string `yaml:"server_groups"`
    } `yaml:"servers"`
}

func main() {
    file, err := os.ReadFile("example2.yaml")
    if err != nil {
        panic(err)
    }

    var s S
    err = yaml.Unmarshal(file, &s)
    if err != nil {
        panic(err)
    }

    // 验证解析结果
    fmt.Printf("First server's first group: %#v\n", s.Servers[0].ServerGroups[0])
    fmt.Printf("Second server's groups: %#v\n", s.Servers[1].ServerGroups)
}

额外说明

如果你原本期望server_groups是一维字符串列表(不需要外层短横线),那YAML应该写成:

server_groups: [r1, r2, r3]

此时结构体用[]string类型才是正确的。

内容的提问来源于stack exchange,提问作者André

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 11:10:49