Range []string returns uint8



我有一个yaml文件,目前写为:

resource:
File:
containment_path:
- File
- File::Value
Default:
containment_path:
- Default
- Default::Echo
- Default[main]
Exec:
containment_path:
- Stage
- Exec::File
- Exec[File]

我使用结构来获取containment_path:

type Yaml struct {
ContainmentPath      []string      `yaml:"containment_path"`
}

我想在ContainmentPath范围内获得containment_path中的第二个值:File:: value, Default::Echo, Exec::File

我这样写代码:
for _, v := range m.ContainmentPath {
spew.Dump("Value ContainmentPath:", m.ContainmentPath)
spew.Dump("Value v[1]:", v[1])      
value = v[1]
}

当我运行它时,我得到ContainmentPath:

(string) (len=8) "Value ContainmentPath:"
([]string) (len=2 cap=2) {
(string) (len=4) "File",
(string) (len=11) "File::Value"
}
(string) (len=8) "Value ContainmentPath:"
([]string) (len=3 cap=3) {
(string) (len=7) "Default",
(string) (len=13) "Default::Echo",
(string) (len=13) "Default[main]"
}
(string) (len=8) "Value ContainmentPath:"
([]string) (len=3 cap=3) {
(string) (len=5) "Stage",
(string) (len=10) "Exec::File",
(string) (len=10) "Exec[File]"
}

当我运行它时,我得到v[1]:

(string) (len=11) "Value v[1]:"
(uint8) 114
(string) (len=11) "Value v[1]:"
(uint8) 105
(string) (len=11) "Value v[1]:"
(uint8) 116

我想得到v[1]的值:File::Value, Default::Echo, Exec::File
我怎么能在Go中做到这一点?

感谢

您正在索引string,而不是[]string

ContainmentPath是一个字符串切片。

当您运行for _, v := range m.ContainmentPath时,v将获取片中每个字符串的值。所以v的类型是string

当您打印v[1]时,您正在索引字符串(不首先检查其长度,非常糟糕的主意)并打印字符串中的第二个字符,这是一个字节。字节只是uint8的别名。

最新更新