首页 > 解决方案 > 在 golang 中发现可能为 nil 的深层结构的最佳实践

问题描述

目前我正在使用带有 golang 的 AWS sdk。大多数 API 命令返回深层结构,并且该结构的所有字段都是能够表示数据缺失的指针。

但这会导致代码非常难看,因为如果您编写代码并想在树的深处获取一个值,这可能看起来像这样

func getInstanceID(res *Result) string {
  if result == nil ||
     len(result.reservations) == 0  ||
     result.reservations[0].instance == nil ||
     result.reservations[0].instance.instanceID == nil {
     return ""
  }

  return *result.reservations[0].instance.instanceID
}

这就是 Kotlin 安全调用功能会派上用场的地方。

下面的代码是否可以被认为是最佳实践(或相当糟糕的实践):

func getInstanceID(res *Result) string {
  defer func() { recover() }()
  return *result.reservations[0].instance.instanceID
}

所以你不必照顾所有的 nil 和长度检查,如果有什么失败,则返回零值。

你怎么看?

标签: go

解决方案


推荐阅读