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
相关产品推荐
相关产品推荐

