You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Golang遍历列表时处理nil指针避免程序崩溃的方法

解决Go中nil指针解引用导致的panic问题

你的代码崩溃的核心原因是:只检查了trk是否为nil,但忽略了**trk非nil但trk.EngineType是nil**的情况——此时直接解引用*trk.EngineType依然会触发invalid memory address panic。

要彻底处理所有可能的nil场景,需要分层检查指针:

修正后的代码方案1(分步检查)

for _, res := range resp.Autombiles {
    for _, trk := range res.Trucks {
        // 检查外层trk指针是否为nil
        if trk == nil {
            fmt.Println("EMPTY")
            continue
        }
        // 检查内层EngineType指针是否为nil
        if trk.EngineType == nil {
            fmt.Println("EMPTY")
        } else {
            fmt.Println(*trk.EngineType)
        }
    }
}

修正后的代码方案2(短路求值简化写法)

利用Go中&&的短路特性,只要前面的条件不满足,后面的表达式就不会执行,避免无效指针访问:

for _, res := range resp.Autombiles {
    for _, trk := range res.Trucks {
        if trk != nil && trk.EngineType != nil {
            fmt.Println(*trk.EngineType)
        } else {
            fmt.Println("EMPTY")
        }
    }
}

关键提示

如果你的数据结构中还有其他可能为nil的指针字段,都需要按照这个逻辑添加检查——只要涉及指针解引用(*操作符),就必须确保指针本身非nil,否则都会触发panic。

内容的提问来源于stack exchange,提问作者badman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 04:27:31