【问题标题】:Range []string returns uint8Range []string 返回 uint8
【发布时间】:2021-10-26 06:38:22
【问题描述】:

我有一个 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 中做到这一点?
谢谢

【问题讨论】:

  • 如果您不理会spew.Dump 并使用fmt.Println 打印您的v[1] 会发生什么?我的意思是,您尝试调试问题的方式不会产生问题。 spew 是一个很棒的软件包,但它需要一定的知识才能正确使用。
  • @kostix 当我使用 fmt.Println 我得到 Value v[1] 114 Value v[1] 105 Value v[1] 116

标签: arrays string go yaml


【解决方案1】:

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

ContainmentPath 是一个字符串切片。

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

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

【讨论】:

  • 啊,好吧,所以我必须直接索引我的 ContainmentPath 变量
  • m.ContainmentPath[1]
猜你喜欢
  • 2016-04-29
  • 2010-12-28
  • 2017-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-27
相关资源
最近更新 更多