Buffalo correspond bien.
Je l’ai déjà utilisé une ou deux fois, ça marche bien.
Après, question d’approche, mais il faut bien voir que "framework" est presque un gros mot dans la culture des gophers. Buffalo a pour but d’offrir une porte d’entrée facile à franchir, mais plusieurs toutes petites choses peuvent éventuellement en détourner les gens. Notamment :
- Il n’utilise pas gorm (l’ORM le plus populaire en Go), mais un autre ORM custom : pop. En soi, ce n’est pas un gros problème à l’utilisation parce que pop est très bien, qu’il s’intègre parfaitement avec les autres outils de buffalo, tout en laissant pas mal de hooks disponibles pour customiser le comportement des modèles auto-générés.
- Les handlers ne suivent pas l’interface du package standard
net/http
, contrairement à toutes les autres bibliothèques de l’écosystème de Go. Ça aussi, en soi, ce n’est pas très grave, mais il faut le savoir : quand on écrit un handler avec Buffalo, ce n’est pas un http.HandlerFunc
standard. Cela dit, les abstractions fournies par Buffalo pour ce design valent le coup. Il faut donc se poser la question de savoir si la compatibilité entre les handlers qu’on écrit avec Buffalo et un http.Server
standard est importante ou non à nos yeux (souvent, non, mais il faut quand même se poser la question).
- Les migrations ne s’écrivent pas directement en SQL, mais plutôt dans un langage custom (
fizz
). Ça non plus, en soi ce n’est pas un gros soucis, d’autant plus que quand on crée un nouveau modèle, les fichiers de migration sont automatiquement générés.
Après, se pose la question de savoir si le fait d’auto-générer ses modèles et ses migrations constitue un réel apport à l’échelle du projet. Et surtout quelle est l’ambition de celui-ci. En ce qui me concerne, j’ai une approche "anti-framework", parce qu’à l’échelle de mon projet, le temps que je passe à écrire des migrations en SQL et des modèles pour gORM est négligeable devant le temps que je passe sur le reste de mon travail : je n’ai pas besoin de définir des modèles tous les jours, et seulement une partie de mon backend repose sur un SGBDR. Si jamais cette tendance venait à s’inverser demain, l’approche "go" voudrait que j’écrive moi-même mon générateur de code, adapté à ma stack, et je le ferais sans hésiter… Mais ça, c’est mon point de vue dans le contexte de mon projet : si demain j’étais amené à travailler sur un projet de site web classique, je pense que Buffalo est probablement le choix que je ferais, et je sais déjà qu’il me ferait gagner un paquet de temps.