我在Go中有一个 struct ,看起来像这样:

type A struct {
    Name string
    Type string
    Time string
}

我想写一个less函数来比较两个 struct A,例如

func (s A) less(other A) bool {
    if s.Name < other.Name {
        return True
    }
    if other.Name < s.Name {
        return False
    }
    if s.Type < other.Type {
        return True
    }
    if other.Type < s.Type {
        return False
    }
    return s.Time < other.Time
}

我想知道是否有更好的方法/更简单的方法来编写这个逻辑?谢谢!

推荐答案

以下是一种更简短的写作方式:

func (s A) Less(other A) bool {
    switch {
    case s.Name != other.Name:
        return s.Name < other.Name
    case s.Type != other.Type:
        return s.Type < other.Type
    default:
        return s.Time < other.Time
    }
}

Go相关问答推荐

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

如何在另一个文件夹中使用Delve运行二进制文件?

一种基于时间的Golang函数节制器

编辑时保留YAML文件中的单引号

GO错误:Tim.Time未实现driver.Valuer(缺少方法值)

使用一元或服务器流将切片从GRPC服务器返回到客户端

在Uber FX中实现后台进程正常关闭的正确方式是什么?

Golang使用Run()执行的命令没有返回

Docker Compose Health Check未退出,错误为无法启动

如何从 nil 指针创建值

我们如何保证取消的上下文会导致 goroutine 终止?

如何将验证器标记添加到嵌套字段

是否可以在 hyperledger-chaincode 中使用 gRPC?如果可以,我如何避免在测试网络上调用时出错?

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

如何在 Go 中编写示例测试?

golang 中的可变参数函数

通过 golang 中的 gremlin-go 库嵌入 gremlin 服务器

Golang Gin 绑定请求正文 XML 到 Slice

go:识别重新定义标志的包

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