我是个新手(现在全职使用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
}

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

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

推荐答案

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

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)
}

Go相关问答推荐

杜松子wine -戈尼克背景在 children 围棋例行公事中被取消

gorm插入不支持的数据

链自定义GRPC客户端拦截器/DialOptions

即使HTTP服务器正在使用GO和Protobuf、SQL Server启动,请求也不返回结果

如何创建在responseWriter.Write 上返回错误的http.ResponseWriter 模拟实例?

htmx 表单 + gin 无法正确读取请求正文

Go - 永远停止带有上下文的循环

仅使用公共 api 对 alexedwards/scs 进行简单测试

如何在 Go 中将 int 转换为包含 complex128 的泛型类型?

为什么 net/http 不遵守超过 30 秒的超时持续时间?

从 eBPF LRU 哈希映射中错误驱逐的元素

缺少签名帮助文档

使用 Go 解组 SOAP 消息

具有两个或多个模型的 GORM 查询

Golang Getrlimit 返回与 ulimit 不同的值

使用无服务器工作流 go sdk 时出现间歇性 JSON 解组错误

如何从 Go 1.18 中的单个方法返回两种不同的具体类型?

使用 Go 读取 TOML 文件时结果为空

Terraform 自定义提供程序 - 数据源架构

Go 语言的select语句