Go lang - 惯用的默认回退

Go lang - idiomatic default fallbacks

我是新手(现在全职使用 Go 大约 9 个月)。但是,我已经习惯了 Python、typescript 和 PHP,而且我总能找到使用这些语言的捷径。但是,我很难知道实现以下目标的最惯用方法是什么:

transit := gin.H{
    "rise": rs.Rise.String(),
    "set":  rs.Set.String(),
}

if rs.Rise.IsZero() {
    transit["rise"] = nil
}

if rs.Set.IsZero() {
    transit["set"] = nil
}

本质上,我设置了一个默认结构,然后如果我需要更改,我会更改...但我觉得效率很低...所以我想知道这里是否有我可以使用的技巧?

我选择了这个特定的真实场景,但我很高兴有示例(而不是为我编写代码)...

这在执行方面并不低效。与其他语言相比,它可能有点冗长。有一些方法可以使用匿名函数来缩短此类重复代码。这有助于在不牺牲可读性的情况下缩短冗长的重复部分。

type StringZeroable interface {
   fmt.Stringer
   IsZero() bool
}

checkZero:=func(in StringZeroable) interface{} {
   if in.IsZero() {
     return nil
   }
   return in.String()
}

transit := gin.H{
    "rise": checkZero(rs.Rise),
    "set":  checkZero(rs.Set)
}