Go遍历YAML解析的containment_path切片取值返回uint8问题求解
问题根因
你当前写法的错误逻辑如下:
- 遍历
m.ContainmentPath时,循环变量v是切片中的单个字符串元素,Go 中对字符串直接用[索引]取值得到的是对应位置的字节(uint8类型),所以你拿到的是字符串第二个字符的ASCII码,而非预期的切片元素。 - 你需要获取的是
ContainmentPath切片整体的第二个元素,不需要遍历切片内的元素,直接通过切片索引取值即可。
完整实现步骤
第一步:补充完整YAML解析结构体
你的YAML顶层是resource字段,其下是动态键名(File/Default/Exec),每个键对应你定义的Yaml结构体,需要先定义顶层解析结构:
type ResourceRoot struct { Resource map[string]Yaml `yaml:"resource"` } type Yaml struct { ContainmentPath []string `yaml:"containment_path"` }
第二步:正确取值代码
解析得到ResourceRoot实例后,遍历所有资源类型,取每个ContainmentPath的第二个元素即可,注意增加切片长度校验避免索引越界panic:
// 假设root是YAML解析完成后的ResourceRoot实例 for _, yamlItem := range root.Resource { // 校验切片长度至少为2,防止越界 if len(yamlItem.ContainmentPath) < 2 { // 可根据业务需求补充错误处理逻辑 continue } // 切片索引从0开始,第二个元素对应索引1 targetValue := yamlItem.ContainmentPath[1] spew.Dump("取到的第二个元素:", targetValue) }
内容的提问来源于stack exchange,提问作者Symais
相关产品推荐
相关产品推荐

