该项目旨在为Go语言提供一套类型安全的时间处理方案,借鉴JSR-310的设计思想,将时间细分为LocalDate, LocalTime, LocalDateTime, OffsetDateTime等,以适应不同使用场景。核心设计遵循JSR-310习惯,并已完成大部分AI辅助编码及人工评审。目前,项目已支持IsZero()判定,可与Go 1.24的json库的omitzero标记配合使用。虽然时区部分因Go语言特性尚待完善,但主要功能已能满足大部分需求,未来将继续补全Period、Duration及更完善的时区支持。
⏱️ **类型安全的时间划分**: 该库借鉴JSR-310,将时间概念细分为LocalDate(日期)、LocalTime(时间)、LocalDateTime(日期时间)和OffsetDateTime(带偏移量的日期时间)等,以提供更精确和类型安全的时间处理,避免了Go标准库time.Time在不同场景下的模糊性。
⚙️ **JSR-310设计遵循与AI辅助开发**: 项目设计原则上参考了成熟的JSR-310标准,并大量使用AI辅助编码,所有AI生成的代码均经过人工评审,确保了代码质量和可靠性。这使得开发者能以熟悉的方式处理Go中的时间。
💡 **核心设计与未来展望**: 核心类型已全面支持Go 1.24的IsZero()判定,方便与json库的omitzero标记集成。尽管时区处理因Go语言特性尚不完善,但项目仍在积极探索解决方案,并计划补全Period、Duration等功能,以期提供更全面的时间处理能力。
主要的内容是将 time.Time 按照不同的使用场景细分为 LocalDate LocalTime LocalDateTime OffsetDateTime 以及将来会有的 ZonedDateTime 等,将类型安全进行到底 xD 。
设计上尽量仿照 JSR-310 ,毕竟这个切分类型的思想也源自 JSR-310 。参考:threeten.org
对于某些可做出不同决策且个人不认为有明确优劣之分的设计,原则上遵守 JSR-310 习惯。
此外:
大部分代码使用 AI 完成,但都经过人工评审,可以放心使用。该项目主要是参考既有成熟设计( JSR-310 ),涉及复杂算法的部分已经经过仔细的人工评审。当前剩余和时区有关的部分尚未完善,因为 Go 没有很好地暴露 time.Location 抽象,自行携带时区数据库基础设施显得过于笨重,目前还在考虑具体解决方案。此外因为大部分对标 ZonedDateTime 的操作均可通过 Go 标准库的 time.Time 完成,所以这个部分可能优先级不高。由于 Go 语言本身与 Java 语言差异巨大,API 设计不可能照搬,已针对空值等不可避免的问题进行针对性处理,但目前仍然不排除后续调整部分具体 API 设计的情况,比如调整参数个数等。空值处理等核心设计不太可能变化。核心类型已全部支持 Go 1.24 json 库支持的 IsZero() 判定,可放心使用 omitzero 标记。
目前主要功能部分还剩下 Period Duration 以及时区相关等尚未完成,后续会尽量补全。
项目地址: https://github.com/iseki0/goda