测试指数超出范围golang

时间:2015-03-10 15:26:05

标签: arrays go

很抱歉这个noob问题,但我不确定我如何测试我正在访问的元素是否对数组有效,请考虑以下设计代码:

func main() {
    strings := []string{"abc", "def", "ghi", "jkl"}
    for i := 0; i<5; i++ {
        if strings[i] {
            fmt.Println(strings[i])
        }
    }
}

https://play.golang.org/p/8QjGadu6Fu

我显然超出了界限,但我不确定如何测试以防止错误。我已经习惯了PHP,我会使用isset!empty测试,确实会有这样的事情吗?

我浏览了其他问题并看到了len使用的功能,但这似乎不起作用。

2 个答案:

答案 0 :(得分:25)

在Go中,这并不像在PHP中那么容易 - 但请记住,在PHP中它只是简单,因为&#34;索引&#34;数组实际上是关联数组。否则你就不能打孔了#34;通过取消设置单个元素进入数组。

使用Go数组/切片,您必须实际检查数组的长度,如您所写:

if i>=0 && i<len(strings) {...}

就个人而言,我还没有遇到需要这样做的现实生活情况 - 在您的示例中,您可以使用range(strings)并停止担心索引。

使用映射,即Go等效的PHP数组,你可以做&#34; isset&#34;写作:

value, isset := map[index]

如果地图中存在index,则value将被正确设置,isset将为真;如果不是,则value将设置为地图类型的零值,而isset将为false。

答案 1 :(得分:1)

len()应返回切片的元素数。

  

零片,地图或通道的长度为0.(https://golang.org/ref/spec#Length_and_capacity