| design-process | Four design axes, work backwards, minimize surface area | | surface-area | Internal packages, no global state, unknown outputs, mutation guards | | dependencies | Accept don't instantiate, accept interfaces, return structs | | evolution | Breaking changes, param objects vs functional options, result objects |
| testability | TimeNow function type, rand.Rand injection, WithX options, deterministic outputs, DST readiness |
Do NOT apply to application-level code that won't be imported by other modules.
Проектирование библиотек и пакетов Go для долгосрочного развития. Охватывает управление поверхностями API, направление зависимостей, обратную совместимость, компромиссы между объектами параметров и функциональными опциями, а также возможность тестирования посредством детерминированного моделирования. Источник: stuckinforloop/harness.