Files
roadwave/docs/adr/018-librairies-go.md
jpgiannetti 1a67e5ffd0 chore(docs): supprimer liens cassés vers fichiers inexistants
Suppressions/corrections:
- Suppression références ADR inexistants (010, 011, 018-notifications-push)
- Suppression liens vers fichiers d'analyse supprimés (ANALYSE_LIBRAIRIES_GO.md, INCONSISTENCIES-ANALYSIS.md)
- Correction numéros ADR: 010→012, 018→020, 020→022
- Correction liens relatifs dans domains/README.md
- Suppression référence regles-metier/ (structure legacy)

Script: scripts/remove-broken-links.sh
2026-02-07 17:31:30 +01:00

4.7 KiB

ADR-018 : Librairies Go du Backend

Statut : Accepté Date : 2026-01-31

Contexte

Le backend Go de RoadWave nécessite des librairies tierces pour HTTP, base de données, tests, streaming, etc. Le choix doit privilégier :

  • Licences permissives (MIT, Apache-2.0, BSD) sans restrictions commerciales
  • Performance (10M utilisateurs, 100K RPS, p99 < 100ms)
  • Maturité et maintenance active
  • Compatibilité avec PostGIS, HLS, WebRTC

Décision

Utilisation de 16 librairies open-source avec licences permissives.

Core Stack

Catégorie Librairie Licence Justification
HTTP Framework gofiber/fiber/v3 MIT 36K RPS, WebSocket natif, Express-like
PostgreSQL jackc/pgx/v5 MIT 30-50% plus rapide, PostGIS natif
Redis redis/rueidis Apache-2.0 Client-side caching, GEORADIUS
SQL Codegen sqlc-dev/sqlc MIT Type-safe, zero overhead (ADR-011)
Migrations golang-migrate/migrate MIT Standard, CLI + library

Tests

Catégorie Librairie Licence Justification
Unitaires stretchr/testify MIT Standard Go (27% adoption)
BDD cucumber/godog MIT Gherkin natif (ADR-007)
Intégration testcontainers/testcontainers-go MIT PostGIS réel dans Docker
Load grafana/k6 AGPL-3.0 Performant (OK usage interne)

Services Externes

Catégorie Librairie Licence Justification
Auth JWT zitadel/zitadel-go/v3 Apache-2.0 SDK Zitadel officiel (ADR-008)
WebRTC pion/webrtc/v4 MIT Pure Go, radio live (ADR-002)
WebSocket coder/websocket ISC Minimal, notifications (ADR-017)
APNS Push sideshow/apns2 MIT Client APNS HTTP/2 natif (ADR-017)
FCM Push golang.org/x/oauth2 + HTTP BSD-3 FCM HTTP v1 API directe (ADR-017)
HLS/FFmpeg asticode/go-astiav MIT Bindings FFmpeg n8.0

Utilitaires

Catégorie Librairie Licence Justification
Config spf13/viper MIT Multi-format, env vars
Logging rs/zerolog MIT Zero allocation, le plus rapide

Alternatives considérées

Voir pour comparatifs complets :

  • Framework : Fiber vs Gin vs Echo vs Chi
  • PostgreSQL : pgx vs GORM vs database/sql
  • Redis : rueidis vs go-redis vs redigo
  • Codegen : sqlc vs SQLBoiler vs Ent
  • Logging : zerolog vs zap vs slog

Justification

Licences

  • 15/16 librairies : MIT, Apache-2.0, BSD, ISC (permissives)
  • 1/16 : AGPL-3.0 (k6 load testing, OK usage interne)
  • Compatibilité totale : Aucun conflit de licence

Performance

  • Fiber : 36K RPS (5% plus rapide que Gin/Echo)
  • pgx : 30-50% plus rapide que GORM
  • rueidis : Client-side caching automatique
  • zerolog : Zero allocation, benchmarks 2025

Maturité

  • Standards : testify (27% adoption), golang-migrate, viper
  • Production : Fiber (33K stars), pgx (10K stars), pion (13K stars)
  • Maintenance : Toutes actives (commits 2025-2026)

Conséquences

Positives

  • Aucune restriction licence commerciale
  • Stack cohérent avec ADR existants (001, 002, 007, 008, 013, 015, 019)
  • Performance validée (benchmarks publics)
  • Écosystème mature et documenté

Négatives

  • ⚠️ k6 (AGPL-3.0) : Copyleft, mais OK pour tests internes (pas de SaaS k6 prévu)
  • ⚠️ Gestion certificats APNS : Renouvellement annuel, configuration manuelle
  • Courbe d'apprentissage : 16 librairies à maîtriser (doc nécessaire)

Dépendances go.mod

require (
    github.com/gofiber/fiber/v3 latest
    github.com/jackc/pgx/v5 latest
    github.com/redis/rueidis latest
    github.com/sqlc-dev/sqlc latest
    github.com/golang-migrate/migrate/v4 latest
    github.com/stretchr/testify latest
    github.com/cucumber/godog latest
    github.com/testcontainers/testcontainers-go latest
    github.com/zitadel/zitadel-go/v3 latest
    github.com/pion/webrtc/v4 latest
    github.com/coder/websocket latest
    github.com/sideshow/apns2 latest
    golang.org/x/oauth2 latest  // For FCM authentication
    github.com/asticode/go-astiav latest
    github.com/spf13/viper latest
    github.com/rs/zerolog latest
    grafana/k6 latest  // dev only
)

Références

  • (tableaux comparatifs, sources)
  • ADR-001 : Langage Backend (Fiber, pgx, go-redis)
  • ADR-007 : Tests BDD (Godog)
  • ADR-011 : Accès données (sqlc)
  • ADR-011 : Stratégie tests (testify, testcontainers, k6)
  • ADR-017 : Notifications (WebSocket, FCM)