对于这个新手问题,我很抱歉,但是我不确定如何测试我正在访问的元素是否对数组有效,请考虑以下人为编写的代码:

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测试,go有这样的东西吗?

我浏览了其他问题,看到使用了len函数,但似乎不起作用.

推荐答案

在Go中,这不像在PHP中那么简单-但请记住,在PHP中这只是简单的,因为"索引"数组实际上是幕后的关联array.否则,您将无法通过取消设置单个元素来在数组中"打孔".

对于GO数组/切片,您必须实际判断数组的长度,如您所写的:

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

就我个人而言,我还没有遇到需要这样做的现实情况——在你的例子中,你可以使用range(strings),不再担心索引.

使用映射(相当于PHP数组的GO),您可以通过编写以下代码来执行"isset"操作:

value, isset := map[index]

如果index出现在 map 中,value将被适当设置,isset将为真;否则,value将被设置为映射类型的零值,isset将为false.

Go相关问答推荐

为什么使用append时Go切片的初始容量会随着int32和int64类型的不同而变化?

try 用GitHub操作中的release标签更新version. go文件,但失败了

Go PQ驱动程序无法使用默认架构进行查询

如何使用Promela建模语言对Golang RWLock进行建模

从使用Golang otelmux检测的Otel跟踪中获取trace_id

Python样式生成器实现为通道:过早读取

为什么要立即调用内联函数,而不仅仅是调用其包含的函数?

如何找到一个空闲的TPM句柄来保存新的密钥对对象?

优化方式中所有可能组合的字符串相似度

通过 Terraform 中的 MapNestedAtribute 进行迭代

hyperledger fabric - go:在 $PATH 中找不到可执行文件

Opensearch 错误 ping 弹性服务器:由未知权威签署的 x509 证书

由于 main.go 文件中的本地包导入导致构建 docker 容器时出错

Golang:如何判断通过缓冲通道进行通信时生产者或消费者是否较慢?

接受通道和切片的通用函数

如何使用特定的 Go 版本运行 govulncheck?

go 是否对 struct 使用空间填充之类的东西?

使用无服务器工作流 go sdk 时出现间歇性 JSON 解组错误

使用 oklog/run 来自 Go 编译器的错误(无值)用作值

分配空切片而不引用其类型?