| 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.
Concevoir des bibliothèques et des packages Go pour une évolution à long terme. Couvre la gestion de la surface des API, la direction des dépendances, la compatibilité ascendante, les compromis entre les objets paramètres et les options fonctionnelles, ainsi que la testabilité via une simulation déterministe. Source : stuckinforloop/harness.