Go est une cible pragmatique pour une migration COBOL lorsque la simplicité, la rapidité des builds et la facilité de déploiement importent plus qu’un vaste écosystème de frameworks d’entreprise. Il compile vers un unique binaire statique sans dépendance d’exécution, il fonctionne partout, et son modèle de concurrence intégré convient naturellement à la modernisation du traitement par lots COBOL en charges de travail parallèles.

Ce guide explique ce qu’implique réellement une migration COBOL vers Go, les approches offertes aux entreprises UK, ce qu’elle coûte, et le seul problème de précision que vous devez anticiper dès le départ.

TL;DR

  • Go convient aux migrations COBOL qui privilégient la simplicité, la compilation rapide, le déploiement en binaire unique et la concurrence facile plutôt qu’une lourde pile de frameworks d’entreprise
  • Go n’a pas de type décimal natif : les champs COBOL packed-decimal (COMP-3) sont mappés par défaut sur float64, si bien que les calculs financiers nécessitent une bibliothèque décimale telle que shopspring/decimal
  • Les trois approches principales (conversion automatisée, réécriture parallèle et migration incrémentale « strangler fig ») présentent des profils de risque et de coût différents
  • Une migration de taille moyenne coûte généralement de 200 000 à 800 000 livres sterling et prend un à deux ans ; la décision sur la précision décimale et la couche d’accès aux données sont les points de planification critiques

Pourquoi choisir Go pour une migration COBOL

Go n’est pas le plus grand écosystème d’entreprise, mais c’est un langage délibéré et ciblé qui convient très bien à certaines modernisations COBOL :

Simplicité et lisibilité. Go possède un ensemble de fonctionnalités réduit et cohérent. La logique COBOL traduite reste lisible, et les nouveaux membres de l’équipe deviennent productifs rapidement, ce qui réduit le risque de maintenance à long terme.

Déploiement en binaire unique. Go compile vers un seul exécutable autonome sans runtime à installer. Pour les équipes qui quittent un mainframe pour des serveurs Linux ou des conteneurs, le déploiement devient trivial.

Concurrence intégrée. Les goroutines et les canaux facilitent la parallélisation du traitement par lots séquentiel, enregistrement par enregistrement, qui domine les systèmes COBOL. Un traitement par lots nocturne qui s’exécutait en série sur le mainframe peut souvent être restructuré pour traiter des partitions de manière concurrente.

Compilation rapide et adéquation cloud-native. Les builds rapides de Go et ses petites images de conteneur conviennent au CI/CD moderne et au déploiement cloud sur Azure, AWS ou GCP.

La décision sur la précision décimale à prendre tôt

C’est le point de planification le plus important d’une migration COBOL vers Go. Les champs COBOL PIC 9 et COMP-3 contiennent des valeurs décimales exactes en base 10, ce dont dépendent les systèmes financiers. Go n’a aucun type décimal natif. Le mappage par défaut d’un champ décimal est float64, qui utilise la virgule flottante binaire IEEE 754 et peut introduire des erreurs d’arrondi dans les calculs monétaires.

Pour toute logique financière ou sensible aux décimales, l’approche correcte consiste à utiliser un paquet décimal tel que shopspring/decimal à la place de float64. Un bon convertisseur rend cette décision visible plutôt que silencieuse : l’outil de migration COBOL vers Go de Mecanik mappe les champs décimaux sur float64 par défaut, mais signale chacun d’eux dans son Migration Report, afin que vous puissiez décider champ par champ où une arithmétique décimale exacte est requise. Ne livrez jamais de code monétaire sur float64 sans cette revue. Si une précision décimale exacte sans bibliothèque supplémentaire est une priorité, C# (decimal natif) ou Java (BigDecimal) pourraient mieux convenir.

Les constructions COBOL qui nécessitent une vraie traduction

Une migration sûre traduit la sémantique COBOL en Go idiomatique, pas le texte :

  • Les éléments de groupe (hiérarchies de niveaux 01-49) deviennent des types struct Go avec des champs exportés en PascalCase (ACCOUNT-BALANCE devient AccountBalance).
  • Les clauses PIC se mappent vers le bon type Go : string pour l’alphanumérique, int16 / int32 / int64 pour le numérique selon le nombre de chiffres, et float64 (ou un paquet décimal) pour les champs décimaux.
  • Les plages PERFORM deviennent des appels de fonction ; les paragraphes et sections se décomposent en fonctions.
  • EVALUATE / WHEN se mappe vers des instructions switch.
  • COPY et REPLACE (copybooks) doivent être résolus, y compris les copybooks imbriqués.
  • EXEC SQL (DB2), EXEC CICS et VSAM doivent être repensés sur database/sql, sqlx ou un ORM tel que GORM de Go, et sur des modèles de service modernes.
  • L’encodage EBCDIC et les mises en page à largeur fixe nécessitent une conversion explicite vers Unicode et des modèles typés, généralement avec des E/S tamponnées (bufio).

Approches de migration

Il existe trois approches principales, chacune avec un profil de risque et de coût différent.

1. Conversion automatisée

L’outillage analyse le COBOL et génère du Go avec structure de paquets, structs typés, entiers dimensionnés et E/S fichier tamponnées. Il élimine rapidement le travail mécanique. Il ne prend pas les décisions architecturales à votre place.

Idéal pour : les grandes bases de code où la priorité est d’éliminer rapidement la dépendance à COBOL.

Risque : les champs décimaux, le SQL embarqué, les interactions CICS et les appels dynamiques nécessitent tous une revue humaine. Le Migration Report existe précisément pour les faire apparaître.

2. Réécriture parallèle

Le système Go fonctionne en parallèle du système COBOL, tous deux traitant les mêmes entrées, les sorties étant validées l’une par rapport à l’autre jusqu’à ce que Go réussisse et que COBOL soit mis hors service.

Idéal pour : les systèmes critiques où la continuité ne peut être risquée.

Risque : exécuter deux systèmes en parallèle double le coût opérationnel pendant la migration et exige une réconciliation rigoureuse.

3. Migration incrémentale (Strangler Fig)

Les programmes COBOL sont remplacés un à un par des équivalents Go. Le système devient hybride, puis finalement du Go pur.

Idéal pour : les grands systèmes COBOL monolithiques où une réécriture complète est impraticable.

Risque : l’état hybride peut persister plus longtemps que prévu et exige une conception d’interface soignée.

Pour la plupart des migrations UK, l’approche strangler fig combinée à une conversion automatisée sélective offre le meilleur équilibre entre risque et vélocité.

Coûts d’une migration COBOL vers Go au UK

Le coût dépend fortement de la taille de la base de code, de la complexité et de l’approche. Fourchettes indicatives pour les projets d’entreprise UK :

Taille du systèmeApprocheCoût estimé
Petit (< 50 000 lignes)Réécriture parallèle80 000 à 200 000 livres
Moyen (50 000 à 500 000 lignes)Strangler fig200 000 à 800 000 livres
Grand (500 000+ lignes)Automatisé + refactoring incrémental500 000 à 2 000 000+ livres
Décommissionnement de mainframe legacyProgramme complet1 000 000 à 10 000 000+ livres

Ces chiffres couvrent l’analyse, la migration, les tests et le support de mise en production. Ils excluent les coûts opérationnels récurrents, la formation et le travail d’intégration en aval qui surgit souvent en milieu de projet.

Le service de migration COBOL vers Go de Mecanik se spécialise dans les migrations d’entreprise UK, couvrant l’évaluation, la conversion, l’implémentation de la couche d’accès aux données et les tests de parité des sorties. Pour les organisations qui pèsent les langages cibles, l’aperçu de la migration COBOL présente l’éventail complet, notamment C#, Java, Python, C++ et Rust. Pour les migrations depuis IBM z/OS, le service de migration de mainframe legacy couvre le démantèlement de l’infrastructure en parallèle de la migration du code.

Risques clés et comment les gérer

Précision décimale. Le risque déterminant d’une migration Go. Passez en revue chaque champ mappé sur float64 signalé dans le Migration Report et basculez les champs financiers vers un paquet décimal avant la mise en production.

Logique métier non documentée. Des décennies de règles métier embarquées sans documentation externe. La découverte et la documentation sont la partie la plus chronophage et la plus risquée de toute migration.

La couche d’accès aux données. EXEC SQL contre DB2 et la gestion VSAM doivent être repensés sur database/sql ou un ORM. C’est souvent le plus gros poste de travail unique.

Performance et concurrence. Go offre de bonnes performances et sa concurrence peut surpasser un traitement par lots COBOL en série, mais la restructuration de la logique séquentielle en charges de travail parallèles doit préserver les garanties d’ordre et de correction.

Couverture des tests de régression. Prouvez que la sortie Go correspond à celle de COBOL grâce à des tests de régression complets sur des données réelles (anonymisées), en accordant une attention particulière aux calculs sensibles aux décimales. Construisez la suite de tests avant le début de la migration.

Risque de bascule. Un plan de bascule détaillé avec rollback et réconciliation est obligatoire.

Points essentiels à retenir

  • Go convient aux migrations COBOL qui privilégient la simplicité, le déploiement en binaire unique et la concurrence.
  • Go n’a pas de type décimal natif ; planifiez la décision float64 versus bibliothèque décimale pour chaque champ financier dès le départ.
  • La plupart des projets d’entreprise UK utilisent l’approche strangler fig avec une automatisation sélective.
  • Les plus grands risques sont la précision décimale, la logique métier non documentée et la couche d’accès aux données.

Foire aux questions (FAQ)

Pourquoi choisir Go plutôt que Java ou C# pour une migration COBOL ? Choisissez Go pour la simplicité, la compilation rapide, le déploiement en binaire unique et la concurrence intégrée pour paralléliser le travail par lots. Choisissez Java ou C# lorsque vous avez besoin d’un plus grand écosystème de frameworks d’entreprise ou d’un support décimal natif/par bibliothèque avec moins de revue manuelle.

Comment Go gère-t-il les champs packed-decimal de COBOL ? Go n’a pas de type décimal natif, si bien que les champs décimaux sont mappés par défaut sur float64, ce qui peut introduire des arrondis dans les calculs financiers. Un bon convertisseur signale chaque champ décimal afin que vous puissiez remplacer float64 par un paquet tel que shopspring/decimal là où une arithmétique exacte est requise.

La logique COBOL peut-elle être convertie automatiquement en Go ? Oui, avec de l’outillage. Un bon convertisseur produit du Go basé sur des paquets avec des structs typés, des entiers dimensionnés et des E/S tamponnées, et signale le SQL embarqué, les interactions CICS, les appels dynamiques et les champs à précision décimale pour un travail manuel. Les décisions architecturales restent des tâches humaines.

Qu’advient-il des formats de données COBOL tels que COMP-3 et EBCDIC ? COMP-3 est mappé sur float64 par défaut (à revoir pour les besoins de décimale exacte). Le texte EBCDIC et les mises en page à largeur fixe nécessitent une conversion explicite vers Unicode et des modèles typés, testés contre des données réelles avant toute utilisation en production.

Combien de temps prend une migration COBOL vers Go ? Les petits systèmes bien documentés prennent trois à neuf mois. Les systèmes d’entreprise moyens s’étalent sur douze à vingt-quatre mois. Les grands programmes de mainframe peuvent prendre trois à cinq ans pour un démantèlement complet.