日元没有"分",退款要带流水号:支付代码里两条要命的规矩
0.1 + 0.2 ≠ 0.3,收钱的代码不能有浮点;但「分 = ×100」也是误区——日元小数 0 位、第纳尔 3 位。退款必须带稳定流水号做幂等,超时先查单再重试。任何语言都用得上的两条支付军规。
PostgreSQL/TimescaleDB 数据建模、迁移治理、账务一致性与去重实践。
0.1 + 0.2 ≠ 0.3,收钱的代码不能有浮点;但「分 = ×100」也是误区——日元小数 0 位、第纳尔 3 位。退款必须带稳定流水号做幂等,超时先查单再重试。任何语言都用得上的两条支付军规。
6 个源文件、约 1000 行代码,如何同时支持 PostgreSQL、MySQL、SQLite?behaviour 接口分层、两阶段 dirty 标记、三种锁实现对比——从源码拆解一个简洁的 Erlang 设计范本。
Ruby 有 ActiveRecord Migrations,Go 有 golang-migrate,那 Erlang 呢?像素级对标 golang-migrate v4 的设计:up/down 回滚、dirty 状态保护、分布式锁,PostgreSQL/MySQL/SQLite 三库支持,零运行时依赖。