为了账号安全,请及时绑定邮箱和手机立即绑定

(Golang) 从列表中处理和格式化 nils

(Golang) 从列表中处理和格式化 nils

Go
米脂 2023-02-06 10:32:23
说我期待这个列表从查询到后端:名称:沃尔沃,发动机型号:2NR - FE,保修:2 年,行驶距离: 9000 公里。如果 EngineType 为空,等于 nil,我想将其设置为“None”,或者如果 Warranty == nil 我想将其设置为“No warranty found”这是我的循环:    for _, res := range resp.Automobiles {        if res.Cars != nil {            for _, car := range res.Cars {                if car == nil || car.EngineType == nil {                    fmt.Println("None")                } else if car.Warranty == nil {                    fmt.Println("NO Warranty Found")                } else {                    details = []string{*car.Name, *car.EngineType, *car.Warranty, *car.DistanceCovered}                    fmt.Println(strings.Join(details, ","))                }            }        }    }}如果 Warranty == nil 和 EngineType == nil 分别是我期望的输出:Volvo, 2NR-FE, No warranty found, 9000kmVolvo, None, 2 years, 9000km我得到的输出:No warranty FoundNone我的代码只是将行设置为它检查的第一个表达式我知道我的代码可能很糟糕,我还在习惯 Go。
查看完整描述

2 回答

?
HUWWW

TA贡献1874条经验 获得超12个赞

我得到的输出


因为如果 EngineType 和 Warranty 都不为零,您只会打印汽车的其他详细信息。如果其中一个为零,则省略其他详细信息。


您可以使用这样的辅助函数来干掉您的代码:


func StrOrDefault(s *string, default string) string {

   if s == nil {

     return default

   } else {

      return *s

   }

}

如果有的话,你还必须决定你想要什么输出car == nil。在下面的代码中,如果 ,我输出“None” car == nil。


    for _, res := range resp.Automobiles {

        if res.Cars == nil {

            continue

        }

        for _, car := range res.Cars {

            if car == nil {

                fmt.Println("None")

                continue

            }

            details = []string{

                *car.Name,

                StrOrDefault(car.EngineType, "None"),

                StrOrDefault(car.Warranty, "No warranty found"),

                *car.DistanceCovered,

            }

            fmt.Println(strings.Join(details, ","))

        }

    }


查看完整回答
反对 回复 2023-02-06
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

您可能更喜欢使用标准库模板机制而不是 fmt 例程。正如https://stackoverflow.com/a/32775203/7050833所示,您可以说“如果不是”...“其他”来捕获 nil 与非 nil 的情况。

查看完整回答
反对 回复 2023-02-06
  • 2 回答
  • 0 关注
  • 165 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号