<?xml version="1.0" encoding="ISO-8859-1"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		<title>Forum du club des développeurs et IT Pro - Go</title>
		<link>https://www.developpez.net/forums/</link>
		<description><![CDATA[Forum d'entraide sur Go, le langage de Google inspiré de C et de Pascal.]]></description>
		<language>fr</language>
		<lastBuildDate>Sat, 18 Apr 2026 11:00:00 GMT</lastBuildDate>
		<generator>vBulletin</generator>
		<ttl>15</ttl>
		<image>
			<url>https://forum.developpez.be/images/misc/rss.png</url>
			<title>Forum du club des développeurs et IT Pro - Go</title>
			<link>https://www.developpez.net/forums/</link>
		</image>
		<item>
			<title><![CDATA[Un développeur Go avec 8 ans d'expérience affirme que Go est le meilleur langage pour les agents IA]]></title>
			<link>https://www.developpez.net/forums/showthread.php?t=2182463&amp;goto=newpost</link>
			<pubDate>Thu, 05 Mar 2026 11:18:03 GMT</pubDate>
			<description>*Quel est le meilleur langage...</description>
			<content:encoded><![CDATA[<div><b><font size="4">Quel est le meilleur langage pour les agents IA ? Un développeur Go avec 8 ans d'expérience affirme que Go surclasse ses concurrents</font></b><br />
<b><font size="1">en se basant sur son expérience avec Bruin, son outil ETL CLI open source</font></b><br />
<br />
<b>Burak Karakan est cofondateur de Bruin, un outil ETL CLI open source écrit en Go. Ayant travaillé professionnellement avec PHP, Go, JavaScript et Python pendant plus de dix ans, il a choisi Go pour Bruin notamment parce qu'il y prenait du plaisir. Ce choix, fait avant l'ère des agents IA, s'est révélé être une bonne intuition. Les agents génèrent d'énormes quantités de code qui semble correct, mais dont la validité réelle est difficile à garantir. Burak Karakan rapporte qu'utiliser un langage compilé à typage statique comme Go permet aux agents d'itérer jusqu'à obtenir du code exempt d'une certaine catégorie de bogues avant même l'exécution.</b> <br />
<br />
Go (également appelé Golang) est un langage de programmation open source, statiquement typé et compilé, conçu chez Google par Robert Griesemer, Rob Pike et Ken Thompson. Le langage a été créé pour répondre aux défis actuels du développement logiciel, tels que les bases de code volumineuses, les temps de compilation lents, ainsi que le besoin d'une concurrence efficace à l'ère des processeurs (CPU) multicœurs et des systèmes en réseau. <br />
<br />
Alors que nous sommes à l'aube de la transformation du développement logiciel par les agents IA, la communauté se pose la question de savoir quel est le meilleur pour cette révolution. Selon certains développeurs, comme Burak Karakan, Go se distingue particulièrement pour dominer l'ère des agents IA.<br />
<br />
Un agent est un système autonome capable de raisonner, de planifier et d'exécuter des tâches avec une intervention humaine minimale. Son fonctionnement repose sur une boucle décisionnelle (raisonnement &#8594; action &#8594; observation) répétée jusqu’à atteindre l’objectif ou une limite de ressources. Cette architecture permet notamment aux agents de décomposer un problème en étapes successives et d’ajuster leur stratégie en fonction des résultats obtenus.<br />
<br />
Le classement de février 2025 de l'index mensuel de popularité des langages de programmation TIOBE a révélé que les langages de programmation rapides sont de plus en plus populaires. L'index TIOBE a révélé que les langages rapides tels que <a href="https://programmation.developpez.com/actu/369202/" target="_blank">C++, Go et Rust gagnent du terrain grâce à l'IA et le traitement de données</a>. Ces langages sont essentiels pour les tâches à forte intensité de données, l'IA et les besoins de performance étant à l'origine de cette évolution.<br />
<br />
<b><font size="3">Pourquoi le langage Go est-il adapté aux systèmes d’agents IA ?</font></b><br />
<br />
L’auteur soutient que le langage Go possède des propriétés particulièrement adaptées au développement d’agents IA. Face à Rust, Burak Karakan donne l'avantage à Go pour quatre raisons : la syntaxe de Go est plus simple ; son système de types moins sophistiqué favorise un style idiomatique partagé ; sa compilation est plus rapide, ce qui accélère la boucle de feedback ; et il existe davantage de code Go dans les données d'entraînement des modèles.<br />
<br />
<div style="text-align: center;">
<div class="video-container"><iframe class="restrain" title="YouTube video player" width="560" height="315" allowfullscreen src="//www.youtube.com/embed/KrRD7r7y7NY?wmode=transparent&amp;fs=1" frameborder="0"></iframe></div>
</div><br />
Un agent IA n’est pas qu'une simple fonction qui transforme une entrée en sortie. Il s’agit plutôt d’une entité persistante disposant d’un objectif, d’une mémoire et de la capacité d’exécuter des actions dans le temps. Pour Burak Karakan, Go est bien adapté à ce cas d'utilisation. Voici les caractéristiques qu'il cite :<br />
<br />
<font size="2"><b>Go est un langage compilé</b> </font><br />
<br />
Go est un langage à typage statique et fort, ce qui signifie que les erreurs de types ou d'arguments sont détectées avant l'exécution. Pour les agents IA qui produisent de grandes quantités de code, Burak Karakan a déclaré qu'il s'agit d'un filet de sécurité précieux : le code qui compile est garanti d'être syntaxiquement correct selon les standards du langage, un choix qui élimine une catégorie entière de bogues avant même que le programme ne tourne.<br />
<br />
<b><font size="2">Go est simple</font></b><br />
<br />
Go est conçu pour être immédiatement lisible par quiconque a une expérience dans un autre langage de programmation. Le développeur de logiciels affirme que cette simplicité est doublement utile dans le contexte actuel des agents IA : d'un côté, l'agent génère du code prévisible et compréhensible ; de l'autre, le développeur humain peut rapidement détecter quand l'agent part dans une mauvaise direction ou prend des décisions de conception étranges.<br />
<br />
<b><font size="2">Go a une façon de faire les choses</font></b><br />
<br />
Go impose une manière standard de formater le code, d'écrire les tests, de gérer les erreurs et de compiler les binaires. Contrairement à JavaScript où chaque projet impose ses propres outils et conventions, un projet Go ressemble à tous les autres projets Go. Les agents bénéficient directement de cette uniformité : ils savent exactement quelle commande lancer pour chaque tâche, sans avoir à s'adapter à des configurations spécifiques à chaque projet.<br />
<br />
<b><font size="2">Go compile rapidement</font></b><br />
<br />
Burak Karakan soutient que Go compile nettement plus vite que Rust, ce qui crée une boucle de feedback plus rapide pour les agents IA. Quand un agent génère du code, le teste, détecte une erreur et corrige, la vitesse de compilation détermine directement la vitesse d'itération. Un cycle court signifie plus d'itérations par unité de temps, et donc un résultat final obtenu plus vite. Il faut souligner que certains développeurs Rust ne partagent pas cet avis.<br />
<br />
<b><font size="2">Go supporte nativement le multiplateforme</font></b><br />
<br />
La compilation multiplateforme constitue l'un des fondamentaux de Go : le même code produit des binaires identiques et fonctionnels sur Linux, Windows et macOS, sans friction ni dépendances spécifiques à chaque système d'exploitation. Pour des agents qui tournent dans des environnements variés (sandboxes distantes, pipelines CI...) cela garantit que les tests et les binaires fonctionnent partout de façon identique, sans configuration supplémentaire.<br />
<br />
<b><font size="2">Go dispose d'un riche écosystème</font></b><br />
<br />
Go bénéficie d'un écosystème solide permettant d'interagir avec de nombreux systèmes externes : runtimes, d'API ou d'autres services. Pour un agent qui doit orchestrer des outils, appeler des API ou gérer des bibliothèques tierces, l'auteur estime que la richesse de l'écosystème est un prérequis fondamental.<br />
<br />
<b><font size="2">Les modèles connaissent bien Go</font></b><br />
<br />
Burak Karakan affirme que début 2026, les agents produisent du Go valide du premier coup dans environ 95 % des cas. Il attribue cela non pas au volume brut de données d'entraînement, mais à l'uniformité du code Go : il n'existe généralement qu'une seule façon idiomatique de résoudre un problème, là où Python en offre une vingtaine. Cette cohérence dans le corpus d'entraînement rend les prédictions du modèle de langage plus fiables et plus stables.<br />
<br />
D'autres développeurs partageant l'avis de Burak Karakan ont souligné la manière dont Go gère nativement la concurrence. Les agents IA exécutent souvent plusieurs opérations simultanément : appels à des modèles de langage, exécution d’outils, surveillance de tâches longues ou coordination avec d’autres agents. Selon ces derniers, les goroutines et les channels de Go permettent de gérer facilement ces opérations parallèles sans complexité excessive.<br />
<br />
<b><font size="3">La thèse Go tient-elle vraiment ? Les avis d'autres développeurs</font></b><br />
<br />
Les partisans de Go reconnaissent volontiers ses atouts : un cycle de compilation court, une seule façon idiomatique de faire les choses, une gestion native de la concurrence, etc. Cependant, dans les fils de discussion en ligne, plusieurs développeurs ont immédiatement pointé les limites de cette vision. Burak Karakan n'a travaillé professionnellement qu'avec PHP, Go, JavaScript et Python, ce qui est un périmètre restreint pour proclamer Go &quot;le meilleur&quot;. <br />
<br />
Et Burak Karakan lui-même reconnaît dans son article n'avoir aucune donnée pour étayer ses affirmations, qualifiant ses conclusions de &quot;vibes&quot;. « Je n'ai toutefois aucune preuve pour étayer mes affirmations ; considérez donc cela plutôt comme une intuition », explique le développeur de logiciels.<br />
<br />
<b><font size="2">Rust : le rival sérieux</font></b><br />
<br />
Le contre-argument le plus solide vient des développeurs Rust. Le système de types de Rust serait si strict que le code généré compile presque toujours et tourne sans erreur à l'exécution ; là où Python et JavaScript plantent fréquemment en cours de route. Un utilisateur souligne un détail rarement mentionné : les tests unitaires en Rust sont dans le même fichier que le code source, ce qui fait que les agents IA n'oublient jamais de les mettre à jour. <br />
<br />
Un autre ajoute que les messages d'erreur de Rust sont parmi « les meilleurs de l'industrie », précisément le genre de feedback structuré dont un modèle a besoin pour itérer efficacement. La contrepartie ? Rust compile plus lentement, est plus verbeux, et les modèles ont moins de données d'entraînement dans ce langage. À l'avenir, les modèles pourraient toutefois ajouter plus de données d'entraînement comportant des bases de codes en Rust.<br />
<br />
<b><font size="2">Python : toujours là</font></b><br />
<br />
Plusieurs développeurs déclaré avoir essayé Go, Kotlin, et d'autres alternatives, mais qu'ils étaient revenus à Python. Un témoignage était particulièrement frappant : pour un même projet, le code Python généré par Claude était presque deux fois plus compact, produit plus rapidement, et plus facile à relire. Python fait également tourner tous les modèles, ce qui ouvre la voie à des agents autoaméliorants capables de se réentraîner eux-mêmes.<br />
<br />
<b><font size="3">Et si la vraie question était ailleurs ?</font></b><br />
<br />
Le débat soulève une tension plus profonde. Certains critiques avancent que ce qui compte désormais n'est pas tant le langage que l'outillage autour : un LSP bien configuré, des hooks de test automatiques, un linter qui force la qualité. D'autres font remarquer que la réponse dépend du modèle utilisé. Selon eux, Claude 4.5 gère bien mieux Rust ou Haskell que ses prédécesseurs, ce qui suggère que le &quot;meilleur langage pour les agents&quot; est une cible mouvante.<br />
<br />
Une question dans un fil de discussion sur Hacker News pose une autre réflexion : « si le code est désormais gratuit, pourquoi le langage compte-t-il encore ? ». Un commentateur a répondu comme suit : « le langage compte parce que vous devrez le réviser, et la conception de Go limite le nombre de façons dont il peut mal tourner. Le code est gratuit, certes, mais il n'est pas garanti qu'il soit correct, et le temps consacré à sa révision n'est pas gratuit ».<br />
<br />
<b><font size="3">Conclusion</font></b><br />
<br />
Burak Karakan est le cofondateur de Bruin, un outil ETL CLI open source écrit en Go. Il s'agit d'un outil d'orchestration de données. Burak Karakan se base sur son expérience avec Bruin pour affirmer que Go est le meilleur langage pour les agents IA. Le développeur estime que Go est lisible et facile à comprendre, ce qui permet de suivre les décisions de conception de l'agent et de détecter quand ce dernier part dans une mauvaise direction. <br />
<br />
Mais son article est perçu comme un texte d'opinion sans benchmarks, entièrement anecdotique par plusieurs critiques. Les arguments avancés (compilation rapide, langage rapide, uniformité du code, etc.) sont reconnus comme valides, mais insuffisants pour écarter des alternatives sérieuses comme Rust, dont le code généré compile et tourne presque universellement sans erreur à l'exécution, là où Python et JavaScript plantent fréquemment.<br />
<br />
<a href="https://programmation.developpez.com/actu/378857/" target="_blank">L'essor des agents IA transforme la manière dont les logiciels peuvent être développés</a>. Une étude affirme que les développeurs de logiciels professionnels ne s'adonnent pas au vibe coding ; ils contrôlent des agents IA. Les développeurs expérimentés ont une opinion positive de l'intégration des agents dans le développement de logiciels, car ils sont convaincus de pouvoir pallier les limites des agents, notamment la répétition des mauvais patterns.<br />
<br />
Source : <a rel="nofollow" href="https://getbruin.com/blog/go-is-the-best-language-for-agents/" target="_blank">billet de blogue</a><br />
<br />
<b>Et vous ?</b><br />
<br />
:fleche: Partagez-vous l'avis selon lequel Go est le meilleur langage pour les agents IA ?<br />
:fleche: Sinon quel est, selon vous, le meilleur langage de programmation pour les agents IA ? Pourquoi ?<br />
:fleche: Les agents IA vont-ils prendre en charge le gros du développement logiciel dans les années à venir ?<br />
<br />
<b>Voir aussi</b><br />
<br />
:fleche: <a href="https://go.developpez.com/actu/380230/" target="_blank">La version 1.26 de Go, le langage de programmation développé par Google, est disponible avec des modifications du langage, un nouveau ramasse-miettes, des performances améliorées et bien plus encore</a><br />
<br />
:fleche: <a href="https://programmation.developpez.com/actu/369202/" target="_blank">Les langages de programmation rapides sont-ils de plus en plus populaires ? L'index TIOBE indique que les langages rapides tels que C++, Go et Rust gagnent du terrain grâce à l'IA et le traitement de données</a><br />
<br />
:fleche: <a href="https://programmation.developpez.com/actu/378857/" target="_blank">L'essor des agents IA transforme la manière dont les logiciels peuvent être développés : une étude affirme que les développeurs de logiciels professionnels ne vibe codent pas, ils contrôlent</a></div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f1999/autres-langages/autres-langages/go/">Go</category>
			<dc:creator>Mathis Lucas</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2182463/autres-langages/autres-langages/go/developpeur-go-8-ans-d-experience-affirme-go-meilleur-langage-agents-ia/</guid>
		</item>
		<item>
			<title>La version 1.26 de Go, le langage de programmation développé par Google, est disponible</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2182089&amp;goto=newpost</link>
			<pubDate>Fri, 13 Feb 2026 10:08:51 GMT</pubDate>
			<description>*La version 1.26 de Go, le...</description>
			<content:encoded><![CDATA[<div><b><font size="4">La version 1.26 de Go, le langage de programmation développé par Google, est disponible avec des modifications du langage, un nouveau ramasse-miettes, des performances améliorées et bien plus encore</font></b><br />
<br />
<b>Go 1.26 est désormais disponible. La dernière version du langage de programmation développé par Google introduit deux modifications de la syntaxe du langage : une simplification de la fonction intégrée « new », qui permet désormais à son opérande d'être une expression, et la possibilité pour les types génériques de se référencer à eux-mêmes dans les listes de paramètres de type. Cette mise à jour active également par défaut le ramasse-miettes Green Tea (GC), plus performant, et apporte d'autres améliorations en termes de performances.</b><br />
<br />
Go est un langage de programmation généraliste de haut niveau, statiquement typé et compilé. Il est connu pour la simplicité de sa syntaxe et l'efficacité du développement qu'il permet grâce à l'inclusion d'une grande bibliothèque standard répondant à de nombreux besoins pour les projets courants. Il a été conçu chez Google en 2007 par Robert Griesemer, Rob Pike et Ken Thompson, puis annoncé publiquement en novembre 2009. Sa syntaxe est similaire à celle du C, mais il dispose également d'un ramasse-miettes, d'un typage structurel et d'une concurrence de type CSP.<br />
<br />
<div style="text-align: center;">
<div class="video-container"><iframe class="restrain" title="YouTube video player" width="560" height="315" allowfullscreen src="//www.youtube.com/embed/ItmJUrcFkM4?wmode=transparent&amp;fs=1" frameborder="0"></iframe></div>
</div><br />
Go 1.26 introduit plusieurs améliorations majeures du langage et du runtime pour les développeurs. La nouvelle fonction intégrée est désormais plus flexible, car elle accepte des expressions pour les opérandes, ce qui simplifie la spécification des valeurs initiales des variables. Cela est particulièrement utile lors du remplissage de champs facultatifs dans les workflows de sérialisation, tels que ceux utilisant <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">encoding/json</span> ou les tampons de protocole qui utilisent souvent des pointeurs.<br />
<br />
Par ailleurs, Go 1.26 permet désormais aux types génériques de se référencer eux-mêmes dans les listes de paramètres de type, ce qui ouvre la voie à des modèles d'abstraction de type plus avancés. Les développeurs bénéficient d'une assistance supplémentaire grâce à la commande <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">go</span> fix</span> entièrement remaniée, qui regroupe désormais les modernizers de Go afin d'automatiser les mises à jour des bases de code, d'appliquer des idiomes modernes et de faciliter les migrations d'API à l'aide d'une suite de fixers et d'un inlineur au niveau de la source.<br />
<br />
En termes de performances, le ramasse-miettes Green Tea est désormais activé par défaut, poursuivant ainsi les améliorations apportées en matière d'optimisation et de stabilité lors des expérimentations précédentes. L'efficacité d'exécution est améliorée grâce à une réduction d'environ 30 % de la surcharge des appels <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">cgo</span>. Pour une sécurité renforcée, les plateformes 64 bits bénéficient désormais d'une randomisation de l'adresse de base du tas au démarrage, ce qui rend plus difficile l'exploitation des bogues de mémoire dans <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">cgo</span>.<br />
<br />
À la suite de ces changements, Go 1.26 lance également un profil expérimental de fuite de goroutines et apporte d'autres mises à jour au compilateur, au linker, aux routines bootstrap et à la bibliothèque standard.<br />
<br />
<b><font size="3">Modifications du langage</font></b><br />
<br />
Go 1.26 introduit deux améliorations significatives à la syntaxe du langage et au système de types.<br />
<br />
Tout d'abord, la nouvelle fonction intégrée, qui crée une nouvelle variable, permet désormais à son opérande d'être une expression, spécifiant la valeur initiale de la variable.<br />
<br />
Un exemple simple de ce changement signifie qu'un code tel que celui-ci :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br /></div></td><td valign="top"><pre style="margin: 0">x := <span style="color: #0000ff;">int64</span><span class="br0">&#40;</span><span style="color: #cc66cc;">300</span><span class="br0">&#41;</span>
ptr := &amp;x</pre></td></tr></table></code><hr />
</div><br />
Peut être simplifié comme suit :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code">ptr := <span style="color: #0080ff;">new</span><span class="br0">&#40;</span><span style="color: #0000ff;">int64</span><span class="br0">&#40;</span><span style="color: #cc66cc;">300</span><span class="br0">&#41;</span><span class="br0">&#41;</span></code><hr />
</div><br />
Cette fonctionnalité est particulièrement utile lorsque vous travaillez avec des paquets de sérialisation tels que encoding/json ou les tampons de protocole qui utilisent un pointeur pour représenter une valeur facultative, car elle permet de remplir un champ facultatif dans une expression simple, par exemple :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">import</span> <span style="color: #FF0000;">&quot;encoding/json&quot;</span>
&nbsp;
<span style="color: #0000ff;">type</span> Person <span style="color: #0000ff;">struct</span> <span class="br0">&#123;</span>
    Name <span style="color: #0000ff;">string</span>   <span style="color: #FF0000;">`json:&quot;name&quot;`</span>
    Age  *<span style="color: #0000ff;">int</span>     <span style="color: #FF0000;">`json:&quot;age&quot;`</span> <span style="color: #808080;">// age if known; nil otherwise</span>
<span class="br0">&#125;</span>
&nbsp;
<span style="color: #0000ff;">func</span> personJSON<span class="br0">&#40;</span>name <span style="color: #0000ff;">string</span>, born time.Time<span class="br0">&#41;</span> <span class="br0">&#40;</span><span class="br0">&#91;</span><span class="br0">&#93;</span><span style="color: #0000ff;">byte</span>, error<span class="br0">&#41;</span> <span class="br0">&#123;</span>
    <span style="color: #0000ff;">return</span> <span style="color: #0080ff;">json.Marshal</span><span class="br0">&#40;</span>Person<span class="br0">&#123;</span>
        Name: name,
        Age:  <span style="color: #0080ff;">new</span><span class="br0">&#40;</span>yearsSince<span class="br0">&#40;</span>born<span class="br0">&#41;</span><span class="br0">&#41;</span>,
    <span class="br0">&#125;</span><span class="br0">&#41;</span>
<span class="br0">&#125;</span>
&nbsp;
<span style="color: #0000ff;">func</span> yearsSince<span class="br0">&#40;</span>t time.Time<span class="br0">&#41;</span> <span style="color: #0000ff;">int</span> <span class="br0">&#123;</span>
    <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">int</span><span class="br0">&#40;</span><span style="color: #0080ff;">time.Since</span><span class="br0">&#40;</span>t<span class="br0">&#41;</span>.Hours<span class="br0">&#40;</span><span class="br0">&#41;</span> / <span class="br0">&#40;</span><span style="color: #cc66cc;">365.25</span> * <span style="color: #cc66cc;">24</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span style="color: #808080;">// approximately</span>
<span class="br0">&#125;</span></pre></td></tr></table></code><hr />
</div><br />
Deuxièmement, la restriction selon laquelle un type générique ne peut pas faire référence à lui-même dans sa liste de paramètres de type a été supprimée. Il est désormais possible de spécifier des contraintes de type qui font référence au type générique contraint. Ce changement simplifie la mise en œuvre de structures de données et d'interfaces complexes.<br />
<br />
Par exemple, un type générique <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">Adder</span> peut exiger d'être instancié avec un type qui lui est similaire :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">type</span> Adder<span class="br0">&#91;</span>A Adder<span class="br0">&#91;</span>A<span class="br0">&#93;</span><span class="br0">&#93;</span> <span style="color: #0000ff;">interface</span> <span class="br0">&#123;</span>
    Add<span class="br0">&#40;</span>A<span class="br0">&#41;</span> A
<span class="br0">&#125;</span>
&nbsp;
<span style="color: #0000ff;">func</span> algo<span class="br0">&#91;</span>A Adder<span class="br0">&#91;</span>A<span class="br0">&#93;</span><span class="br0">&#93;</span><span class="br0">&#40;</span>x, y A<span class="br0">&#41;</span> A <span class="br0">&#123;</span>
    <span style="color: #0000ff;">return</span> x.Add<span class="br0">&#40;</span>y<span class="br0">&#41;</span>
<span class="br0">&#125;</span></pre></td></tr></table></code><hr />
</div><br />
Auparavant, l'autoréférence à <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">Adder</span> dans la première ligne n'était pas autorisée. Outre le fait de rendre les contraintes de type plus puissantes, cette modification simplifie également très légèrement les règles de spécification pour les paramètres de type.<br />
<br />
<b><font size="3">Améliorations apportées aux outils</font></b><br />
<br />
<b><font size="2">Commande Go</font></b><br />
<br />
La vénérable commande <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">go</span> fix</span> a été entièrement remaniée et héberge désormais les modernisateurs de Go. Elle offre désormais un moyen fiable et instantané de mettre à jour les bases de code Go vers les dernières expressions idiomatiques et API de bibliothèque centrale. La suite initiale de moderniseurs comprend des dizaines de correcteurs permettant d'utiliser les fonctionnalités modernes du langage et de la bibliothèque Go, ainsi que l'analyseur <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">inline</span> au niveau source qui permet aux utilisateurs d'automatiser leurs propres migrations d'API à l'aide des directives inline <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #808080;">//go:fix</span></span>. Ces correcteurs ne devraient pas modifier le comportement de votre programme.<br />
<br />
La commande <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">go</span> fix</span> réécrite s'appuie sur le même framework d'analyse Go que <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">go</span> vet</span>. Cela signifie que les mêmes analyseurs qui fournissent des diagnostics dans <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">go</span> vet</span> peuvent être utilisés pour suggérer et appliquer des corrections dans <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">go</span> fix</span>. Les correcteurs historiques de la commande go fix, qui étaient tous obsolètes, ont été supprimés.<br />
<br />
<span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">go</span> mod init</span> utilise désormais par défaut une version inférieure de Go dans les nouveaux fichiers <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">go</span>.mod</span>. L'exécution de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">go</span> mod init</span> à l'aide d'une chaîne d'outils de version 1.N.X créera un fichier <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">go</span>.mod</span> spécifiant la version Go go 1.(N-1).0. Les versions préliminaires de 1.N créeront des fichiers <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">go</span>.mod</span> spécifiant go 1.(N-2).0. Par exemple, les versions candidates de Go 1.26 créeront des fichiers go.mod avec go 1.24.0, et Go 1.26 et ses versions mineures créeront des fichiers go.mod avec go 1.25.0. Cela vise à encourager la création de modules compatibles avec les versions actuellement prises en charge de Go. Pour un contrôle supplémentaire de la version de Go dans les nouveaux modules, <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">go</span> mod init</span> peut être suivi de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">go</span> get <span style="color: #0000ff;">go</span>@version</span>.<br />
<br />
<span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">cmd/doc</span> et <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">go</span> tool doc</span> ont été supprimés. <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">go</span> doc</span> peut être utilisé en remplacement de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">go</span> tool doc</span> : il accepte les mêmes flags et arguments et se comporte de la même manière.<br />
<br />
<b><font size="2">Pprof</font></b><br />
<br />
L'interface utilisateur Web de l'outil <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">pprof</span>, activée avec le drapeau <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">-http</span>, affiche désormais par défaut le graphique en flammes. L'ancien graphique est disponible dans le menu « Affichage -&gt; Graphique » ou via <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">/ui/graph</span>.<br />
<br />
<b><font size="3">Améliorations des performances</font></b><br />
<br />
Le compilateur peut désormais allouer la mémoire de sauvegarde pour les tranches sur la pile dans davantage de situations, ce qui améliore les performances.<br />
<br />
<b><font size="2">Nouveau ramasse-miettes</font></b><br />
<br />
Le ramasse-miettes Green Tea, précédemment disponible à titre expérimental dans Go 1.25, est désormais activé par défaut.<br />
<br />
La conception de ce ramasse-miettes améliore les performances du marquage et du balayage des petits objets grâce à une meilleure localisation et une meilleure évolutivité du processeur. Les résultats des tests de performance varient, mais une réduction de 10 à 40 % de la charge liée au ramasse-miettes dans les programmes réels qui utilisent intensivement le ramasse-miettes est attendue. Des améliorations supplémentaires, de l'ordre de 10 % de la charge liée au ramasse-miettes, sont attendues lors de l'exécution sur des plates-formes CPU amd64 plus récentes (Intel Ice Lake ou AMD Zen 4 et plus récentes), car le ramasse-miettes exploite désormais les instructions vectorielles pour analyser les petits objets lorsque cela est possible.<br />
<br />
Le nouveau ramasse-miettes peut être désactivé en définissant <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">GOEXPERIMENT=nogreenteagc</span> lors de la compilation. Ce paramètre de désactivation devrait être supprimé dans Go 1.27. <br />
<br />
<b><font size="2">Appels cgo plus rapides</font></b><br />
<br />
La surcharge d'exécution de base des appels cgo a été réduite d'environ 30 %.<br />
<br />
<b><font size="2">Compilateur</font></b><br />
<br />
Le compilateur peut désormais allouer la mémoire de sauvegarde pour les tranches sur la pile dans davantage de situations, ce qui améliore les performances. Si cette modification pose problème, l'outil bisect peut être utilisé pour trouver l'allocation à l'origine du problème à l'aide du drapeau <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">-compile=variablemake</span>. Toutes ces nouvelles allocations de pile peuvent également être désactivées à l'aide de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">-gcflags=all=-d=variablemakehash=n</span>.<br />
<br />
<b><font size="3">Autres améliorations et modifications</font></b><br />
<br />
Go 1.26 apporte de nombreuses améliorations par rapport à Go 1.25 au niveau des outils, du runtime, du compilateur, du linker et de la bibliothèque standard. Cela inclut l'ajout de trois nouveaux paquets : crypto/hpke, crypto/mlkem/mlkemtest et testing/cryptotest. Il y a également des modifications spécifiques au port et des mises à jour des paramètres GODEBUG.<br />
<br />
Certaines des nouveautés de Go 1.26 sont encore au stade expérimental et ne sont disponibles que si vous les activez explicitement. Notamment :<br />
<br />
<ul><li style=""> Un paquet expérimental simd/archsimd permet d'accéder aux opérations « single instruction, multiple data » (SIMD).</li><li style=""> Un package expérimental runtime/secret fournit une fonctionnalité permettant d'effacer en toute sécurité les fichiers temporaires utilisés dans le code qui manipule des informations secrètes, généralement de nature cryptographique.</li><li style=""> Un profil goroutineleak expérimental dans le package runtime/pprof qui signale les goroutines qui fuient.</li></ul><br />
Ces fonctionnalités expérimentales devraient toutes être disponibles dans une prochaine version de Go. Pour obtenir la liste complète des ajouts, modifications et améliorations apportées à Go 1.26, vous pouvez consulter les notes de version.<br />
<br />
<b>Source :</b> <a rel="nofollow" href="https://go.dev/blog/go1.26" target="_blank">Notes de mise à jour de Go 1.26</a><br />
<br />
<b>Et vous ?</b><br />
<br />
:fleche: Quel est votre avis sur le sujet ?<br />
:fleche: Que pensez-vous des nouveautés proposées par cette version de Go ? Les trouvez-vous utiles et intéressantes ?<br />
<br />
<b>Voir aussi :</b><br />
<br />
:fleche: <a href="https://web.developpez.com/actu/370561/Go-et-WebAssembly-une-alternative-prometteuse-a-React-Dagger-tente-l-approche-pour-optimiser-les-performances-de-son-frontend-et-unifier-sa-base-de-code/" target="_blank">Go et WebAssembly, une alternative prometteuse à React ? Dagger tente l'approche pour optimiser les performances de son frontend et unifier sa base de code</a><br />
<br />
:fleche: <a href="https://programmation.developpez.com/actu/364901/Le-langage-Go-souffle-ses-15-bougies-et-atteint-sa-position-la-plus-haute-sur-l-indice-Tiobe-Google-annonce-que-le-nombre-d-utilisateurs-de-Go-a-plus-que-triple-au-cours-des-cinq-dernieres-annees/" target="_blank">Le langage Go souffle ses 15 bougies et atteint sa position la plus haute sur l'indice Tiobe, Google annonce que le nombre d'utilisateurs de Go a plus que triplé au cours des cinq dernières années</a><br />
<br />
:fleche: <a href="https://go.developpez.com/actu/353870/Sortie-de-la-version-1-22-du-langage-Go-apportant-des-changements-a-l-implementation-de-la-chaine-d-outils-au-moteur-d-execution-et-aux-bibliotheques/" target="_blank">Sortie de la version 1.22 du langage Go, apportant des changements à l'implémentation de la chaîne d'outils, au moteur d'exécution et aux bibliothèques</a></div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f1999/autres-langages/autres-langages/go/">Go</category>
			<dc:creator>Anthony</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2182089/autres-langages/autres-langages/go/version-1-26-go-langage-programmation-developpe-google-disponible/</guid>
		</item>
		<item>
			<title>recursivité en golang</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2180438&amp;goto=newpost</link>
			<pubDate>Wed, 12 Nov 2025 17:59:39 GMT</pubDate>
			<description>bonjour, ça fait quelques...</description>
			<content:encoded><![CDATA[<div>bonjour, ça fait quelques jours j'apprend la récursivité mais j'ai un gros problème c'est que pour des problèmes un peu plus complexe je sais jamais comment formuler en codage ma pensée.</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f1999/autres-langages/autres-langages/go/">Go</category>
			<dc:creator>zwizux</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2180438/autres-langages/autres-langages/go/recursivite-golang/</guid>
		</item>
		<item>
			<title>Créer des jeux avec Go : 3 mois sans LLM contre 3 jours avec LLM ! par Mariano Gappa</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2179348&amp;goto=newpost</link>
			<pubDate>Thu, 18 Sep 2025 18:03:09 GMT</pubDate>
			<description>*Créer des jeux avec Go : 3...</description>
			<content:encoded><![CDATA[<div><b><font size="4">Créer des jeux avec Go : 3 mois sans LLM contre 3 jours avec LLM ! par Mariano Gappa</font></b><br />
<br />
<div style="text-align: center;"><img src="https://www.developpez.net/forums/attachments/p670424d1758266479/autres-langages/autres-langages/go/creer-jeux-go-3-mois-llm-contre-3-jours-llm-mariano-gappa/0.jpg/" border="0" alt="Nom : 0.jpg
Affichages : 73283
Taille : 58,5 Ko"  style="float: CONFIG" /></div><br />
<b><font size="3">Introduction</font></b><br />
<br />
Après 15 ans en tant qu'ingénieur logiciel, je me suis rendu compte que je n'avais jamais réellement créé et publié de jeu.<br />
<br />
Ayant grandi en Argentine &#127462;&#127479; où je jouais aux cartes avec mes amis, j'ai décidé d'en choisir un parmi ceux-là. Je me suis posé la question suivante :<br />
<br />
<div style="text-align: center;"><img src="https://www.developpez.net/forums/attachments/p670425d1758266482/autres-langages/autres-langages/go/creer-jeux-go-3-mois-llm-contre-3-jours-llm-mariano-gappa/1.jpg/" border="0" alt="Nom : 1.jpg
Affichages : 4060
Taille : 10,0 Ko"  style="float: CONFIG" /></div><br />
<b><font size="3">Truco : 3 mois sans LLM</font></b><br />
<br />
Le 18 juin 2024, j'ai commencé à créer Truco pendant mon temps libre. En tant que développeur backend Go de longue date, le backend était une évidence. Le défi résidait dans l'interface utilisateur et l'hébergement à long terme sans serveur payant.<br />
<br />
<div style="text-align: center;"><img src="https://www.developpez.net/forums/attachments/p670426d1758266486/autres-langages/autres-langages/go/creer-jeux-go-3-mois-llm-contre-3-jours-llm-mariano-gappa/2.jpg/" border="0" alt="Nom : 2.jpg
Affichages : 4061
Taille : 26,0 Ko"  style="float: CONFIG" /></div><br />
C'était avant les LLM, donc chaque détail devait être réglé à la main. Il m'a fallu environ 3 mois d'essais et d'erreurs pour le mettre au point.<br />
<br />
Je n'avais jamais prévu de faire de la publicité ou de monétiser le jeu ; je voulais juste le terminer et peut-être donner à quelqu'un la joie de rejouer au jeu de son enfance. Un an plus tard, sans aucun effort supplémentaire de ma part, les gens y jouent toujours !<br />
<br />
<div style="text-align: center;"><img src="https://www.developpez.net/forums/attachments/p670427d1758266490/autres-langages/autres-langages/go/creer-jeux-go-3-mois-llm-contre-3-jours-llm-mariano-gappa/3.jpg/" border="0" alt="Nom : 3.jpg
Affichages : 4062
Taille : 37,5 Ko"  style="float: CONFIG" /></div><br />
Si vous souhaitez le découvrir, voici quelques liens :<br />
<br />
<a rel="nofollow" href="https://marianogappa.github.io/truco-argentino" target="_blank">Truco (jouer au jeu)</a><br />
<br />
<a rel="nofollow" href="https://github.com/marianogappa/truco" target="_blank">Backend en Go</a><br />
<br />
<a rel="nofollow" href="https://github.com/marianogappa/truco-argentino" target="_blank">Frontend en React</a> (ne me jugez pas &#129335;*&#9794;&#65039; c'est le mieux que je puisse faire avec une heure de connaissances en React)<br />
<br />
<b><font size="3">« Escoba » : 3 jours avec les LLM</font></b><br />
<br />
Un an plus tard, lors d'une visite à ma famille en Argentine, j'ai appris à mon neveu à jouer à Escoba, le deuxième jeu de cartes le plus populaire du pays (malgré ce qu'affirme ChatGPT).<br />
<br />
<div style="text-align: center;"><img src="https://www.developpez.net/forums/attachments/p670428d1758266495/autres-langages/autres-langages/go/creer-jeux-go-3-mois-llm-contre-3-jours-llm-mariano-gappa/4.jpg/" border="0" alt="Nom : 4.jpg
Affichages : 4065
Taille : 25,0 Ko"  style="float: CONFIG" /></div><br />
Les LLM étant désormais courants, je me suis demandé à quel point la création d'un jeu pouvait être plus rapide. J'ai donc décidé de le tester.<br />
<br />
J'ai cloné le backend de Truco et j'ai donné à Claude une longue instruction générative expliquant les règles d'Escoba et lui demandant de refactoriser le code pour l'implémenter. À ma grande surprise, cela a fonctionné presque parfaitement dès la première tentative &#128561;. Pendant un instant, je me suis dit : adieu, mon travail &#128560;.<br />
<br />
<div style="text-align: center;"><img src="https://www.developpez.net/forums/attachments/p670429d1758266500/autres-langages/autres-langages/go/creer-jeux-go-3-mois-llm-contre-3-jours-llm-mariano-gappa/5.jpg/" border="0" alt="Nom : 5.jpg
Affichages : 4072
Taille : 52,6 Ko"  style="float: CONFIG" /></div><br />
Le seul bug que j'ai trouvé était qu'il utilisait incorrectement la fonction <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">append</span> à un endroit et modifiait les actions. À part cela, je n'ai ajouté que quelques fonctionnalités supplémentaires (comme un meilleur bot).<br />
<br />
Le frontend était une autre histoire ; il m'a fallu quelques jours pour le mettre au point. Le véritable défi n'était probablement pas seulement le LLM, mais aussi mes propres compétences en React, combinées à la configuration inhabituelle consistant à laisser une fonction WASM black-box gérer l'état du jeu. Le débogage en JavaScript n'a pas non plus facilité les choses. <br />
<br />
Si vous souhaitez le découvrir, voici quelques liens :<br />
<br />
<a rel="nofollow" href="https://marianogappa.github.io/escoba-de-15" target="_blank">Escoba (jouer au jeu)</a><br />
<br />
<a rel="nofollow" href="https://github.com/marianogappa/escoba" target="_blank">Backend en Go</a><br />
<br />
<a rel="nofollow" href="https://github.com/marianogappa/escoba-de-15" target="_blank">Frontend en React</a><br />
<br />
<b><font size="3">Étape par étape : comment créer votre propre jeu</font></b><br />
<br />
Je suppose que vous êtes venu ici pour voir s'il n'est pas trop difficile de vous y essayer vous-même ! Je vais donc vous donner les bases minimalistes pour créer votre propre jeu avec cette pile.<br />
<br />
J'ai écrit un ensemble minimaliste de dépôts pour le jeu Tic-Tac-Toe afin que vous puissiez les forker pour commencer :<br />
<br />
<a rel="nofollow" href="https://github.com/marianogappa/tictactoe-backend" target="_blank">https://github.com/marianogappa/tictactoe-backend</a>, <a rel="nofollow" href="https://github.com/marianogappa/tictactoe-frontend" target="_blank">https://github.com/marianogappa/tictactoe-frontend</a><br />
<br />
Vous pouvez le consulter ici :<br />
<br />
<a rel="nofollow" href="https://marianogappa.github.io/tictactoe-frontend/" target="_blank">https://marianogappa.github.io/tictactoe-frontend/</a><br />
<br />
<div style="text-align: center;"><img src="https://www.developpez.net/forums/attachments/p670430d1758266505/autres-langages/autres-langages/go/creer-jeux-go-3-mois-llm-contre-3-jours-llm-mariano-gappa/6.jpg/" border="0" alt="Nom : 6.jpg
Affichages : 4051
Taille : 20,0 Ko"  style="float: CONFIG" /></div><br />
<b>Côté backend</b><br />
<br />
Un backend au tour par tour est simple à décrire :<br />
<br />
<ul><li style="">Initialisez une structure GameState (par exemple, configuration initiale du plateau, liste d'actions vide).</li><li style="">Implémentez <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">CalculatePossibleActions</span>, afin que les clients sachent ce qui est valide.</li><li style="">Ajoutez RunAction pour modifier le GameState.</li><li style="">S'il y a un bot, écrivez une fonction pour choisir une action à partir de l'état actuel.</li></ul><br />
C'est tout !<br />
<br />
<i>Remarque : oubliez les parties entre humains, à moins que vous ne soyez prêt à payer pour ce serveur.</i><br />
<br />
<br />
<b>Côté front-end</b><br />
<br />
Je ne suis pas un expert en front-end, mais les tâches sont simples :<br />
<br />
<ul><li style="">Appelez le backend pour créer un nouveau <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">GameState</span>.</li><li style="">Affichez-le dans l'interface utilisateur.</li><li style="">Laissez le joueur choisir une action parmi les options valides.</li><li style="">Appelez le backend pour appliquer l'action.</li><li style="">Déclenchez l'action du bot lorsque c'est son tour.</li></ul><br />
C'est tout !<br />
<br />
<b>Interopérabilité côté backend</b><br />
<br />
Pour transcompiler le backend en WASM, vous pouvez compiler avec :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code">GOARCH=wasm GOOS=js <span style="color: #0000ff;">go</span> build -o main.wasm main.<span style="color: #0000ff;">go</span></code><hr />
</div><br />
<br />
<br />
Mais cela produit des binaires énormes (ce qui est lent sur mobile). Utilisez TinyGo pour des binaires plus petits.<br />
<br />
Avant de compiler, vous avez besoin d'un point d'entrée différent pour les fonctions que vous allez mettre à la disposition du frontend. Créez un fichier <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">main.<span style="color: #0000ff;">go</span></span> différent qui exporte les fonctions dont vous avez besoin, et protégez-le via des drapeaux de compilation :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #808080;">//go:build tinygo</span>
<span style="color: #808080;">// +build tinygo</span>
&nbsp;
<span style="color: #0000ff;">package</span> main
&nbsp;
<span class="br0">&#91;</span>...<span class="br0">&#93;</span>
&nbsp;
<span style="color: #0000ff;">func</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
	js.Global<span class="br0">&#40;</span><span class="br0">&#41;</span>.Set<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;trucoNew&quot;</span>, js.FuncOf<span class="br0">&#40;</span>trucoNew<span class="br0">&#41;</span><span class="br0">&#41;</span>
	js.Global<span class="br0">&#40;</span><span class="br0">&#41;</span>.Set<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;trucoRunAction&quot;</span>, js.FuncOf<span class="br0">&#40;</span>trucoRunAction<span class="br0">&#41;</span><span class="br0">&#41;</span>
	js.Global<span class="br0">&#40;</span><span class="br0">&#41;</span>.Set<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;trucoBotRunAction&quot;</span>, js.FuncOf<span class="br0">&#40;</span>trucoBotRunAction<span class="br0">&#41;</span><span class="br0">&#41;</span>
	<span style="color: #0000ff;">select</span> <span class="br0">&#123;</span><span class="br0">&#125;</span>
<span class="br0">&#125;</span>
&nbsp;
<span style="color: #0000ff;">var</span> <span class="br0">&#40;</span>
	state *truco.GameState <span style="color: #808080;">// &quot;Global variable&quot; for the GameState</span>
	bot   truco.Bot
<span class="br0">&#41;</span></pre></td></tr></table></code><hr />
</div><br />
<br />
<br />
N'oubliez pas de bloquer à la fin de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">main<span class="br0">&#40;</span><span class="br0">&#41;</span></span> avec <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">select</span> <span class="br0">&#123;</span><span class="br0">&#125;</span></span> pour empêcher le programme de se fermer immédiatement.<br />
<br />
<br />
<b>Interopérabilité des données backend</b><br />
<br />
<span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">GameState</span> est généralement une structure libre que vous définissez dans Go. WASM ne peut pas sérialiser/désérialiser directement les structures. L'astuce consiste à tout passer en JSON. Après avoir fouillé dans la documentation TinyGo, voici la formule :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">func</span> trucoRunAction<span class="br0">&#40;</span>this js.Value, p <span class="br0">&#91;</span><span class="br0">&#93;</span>js.Value<span class="br0">&#41;</span> <span style="color: #0000ff;">interface</span><span class="br0">&#123;</span><span class="br0">&#125;</span> <span class="br0">&#123;</span> <span style="color: #808080;">// Always this signature</span>
	<span style="color: #808080;">// Read the input JSON</span>
    jsonBytes := <span style="color: #0080ff;">make</span><span class="br0">&#40;</span><span class="br0">&#91;</span><span class="br0">&#93;</span><span style="color: #0000ff;">byte</span>, p<span class="br0">&#91;</span><span style="color: #cc66cc;">0</span><span class="br0">&#93;</span>.Length<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> 
	js.CopyBytesToGo<span class="br0">&#40;</span>jsonBytes, p<span class="br0">&#91;</span><span style="color: #cc66cc;">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span>
&nbsp;
	<span style="color: #808080;">// 1. Decode the input JSON to your struct</span>
    <span style="color: #808080;">// 2. Run your Go code, return an output struct</span>
	<span style="color: #808080;">// 3. Encode the output struct to JSON</span>
	newBytes := _runAction<span class="br0">&#40;</span>jsonBytes<span class="br0">&#41;</span>
&nbsp;
	<span style="color: #808080;">// Return the output JSON</span>
	buffer := js.Global<span class="br0">&#40;</span><span class="br0">&#41;</span>.Get<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;Uint8Array&quot;</span><span class="br0">&#41;</span>.New<span class="br0">&#40;</span><span style="color: #0080ff;">len</span><span class="br0">&#40;</span>newBytes<span class="br0">&#41;</span><span class="br0">&#41;</span>
	js.CopyBytesToJS<span class="br0">&#40;</span>buffer, newBytes<span class="br0">&#41;</span>
	<span style="color: #0000ff;">return</span> buffer
<span class="br0">&#125;</span></pre></td></tr></table></code><hr />
</div><br />
<br />
<br />
<b>Interopérabilité côté frontend</b><br />
<br />
Enfin, appelez les fonctions backend depuis le frontend et [suivez le GameState dans une variable globale]((<a rel="nofollow" href="https://github.com/marianogappa/truco-argentino/blob/main/src/gameState.js#L19" target="_blank">https://github.com/marianogappa/truc...meState.js#L19</a>) :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br /></div></td><td valign="top"><pre style="margin: 0">function jsRunAction<span class="br0">&#40;</span>data<span class="br0">&#41;</span> <span class="br0">&#123;</span>
    <span style="color: #0000ff;">const</span> encoder = new TextEncoder<span class="br0">&#40;</span><span class="br0">&#41;</span>;
    <span style="color: #0000ff;">const</span> encodedData = encoder.encode<span class="br0">&#40;</span>JSON.stringify<span class="br0">&#40;</span>data<span class="br0">&#41;</span><span class="br0">&#41;</span>;
    <span style="color: #0000ff;">const</span> result = trucoRunAction<span class="br0">&#40;</span>encodedData<span class="br0">&#41;</span>;
    <span style="color: #0000ff;">const</span> json = new TextDecoder<span class="br0">&#40;</span><span class="br0">&#41;</span>.decode<span class="br0">&#40;</span>result<span class="br0">&#41;</span>;
    <span style="color: #0000ff;">return</span> JSON.parse<span class="br0">&#40;</span>json<span class="br0">&#41;</span>;
<span class="br0">&#125;</span>
&nbsp;
let gameState = jsNewGame<span class="br0">&#40;</span><span class="br0">&#41;</span>;
&nbsp;
<span style="color: #808080;">// Note that RunAction doesn't take a GameState.</span>
<span style="color: #808080;">// WASM is the source of truth; your frontend can't mutate it.</span>
gameState = jsRunAction<span class="br0">&#40;</span>action<span class="br0">&#41;</span>;</pre></td></tr></table></code><hr />
</div><br />
<br />
<br />
Chaque fois que vous modifiez le backend, vous devez le recompiler en WASM et remplacer l'ancien fichier dans le frontend. J'ai ajouté ceci dans le Makefile :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br /></div></td><td valign="top"><pre style="margin: 0">&nbsp;
compile_library:
	cd $<span class="br0">&#40;</span>GOPATH<span class="br0">&#41;</span>/src/github.com/marianogappa/escoba &amp;&amp; \
	TINYGOROOT=/usr/local/Cellar/tinygo/<span style="color: #cc66cc;">0.38</span>.<span style="color: #cc66cc;">0</span> tinygo build -o main.wasm -target wasm main_wasm.<span style="color: #0000ff;">go</span> &amp;&amp; \
	mv main.wasm $<span class="br0">&#40;</span>CURDIR<span class="br0">&#41;</span>/public/wasm/wasm.wasm &amp;&amp; \
	cp /usr/local/Cellar/tinygo/<span style="color: #cc66cc;">0.38</span>.<span style="color: #cc66cc;">0</span>/targets/wasm_exec.js $<span class="br0">&#40;</span>CURDIR<span class="br0">&#41;</span>/public/wasm/wasm_exec.js &amp;&amp; \
	cd -</pre></td></tr></table></code><hr />
</div><br />
<br />
Notez que je copie également <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">wasm_exec.js</span>. C'est une condition requise pour exécuter le code WASM. L'autre condition requise est d'ajouter la balise script à la tête (HEAD) du fichier HTML :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br /></div></td><td valign="top"><pre style="margin: 0">&nbsp;
    &lt;script src=<span style="color: #FF0000;">&quot;wasm/wasm_exec.js&quot;</span>&gt;&lt;/script&gt;
	&lt;script&gt;
        <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">go</span> = new Go<span class="br0">&#40;</span><span class="br0">&#41;</span>; <span style="color: #808080;">// Defined in wasm_exec.js</span>
        <span style="color: #0000ff;">const</span> WASM_URL = <span style="color: #FF0000;">'wasm/wasm.wasm'</span>;
&nbsp;
        <span style="color: #0000ff;">var</span> wasm;
        let wasmReady = <span style="color: #339933;">false</span>;
&nbsp;
        <span style="color: #0000ff;">if</span> <span class="br0">&#40;</span><span style="color: #FF0000;">'instantiateStreaming'</span> in WebAssembly<span class="br0">&#41;</span> <span class="br0">&#123;</span>
            WebAssembly.instantiateStreaming<span class="br0">&#40;</span>fetch<span class="br0">&#40;</span>WASM_URL<span class="br0">&#41;</span>, <span style="color: #0000ff;">go</span>.importObject<span class="br0">&#41;</span>.then<span class="br0">&#40;</span>function <span class="br0">&#40;</span>obj<span class="br0">&#41;</span> <span class="br0">&#123;</span>
                wasm = obj.instance;
                <span style="color: #0000ff;">go</span>.run<span class="br0">&#40;</span>wasm<span class="br0">&#41;</span>;
                wasmReady = <span style="color: #339933;">true</span>;
            <span class="br0">&#125;</span><span class="br0">&#41;</span>
        <span class="br0">&#125;</span> <span style="color: #0000ff;">else</span> <span class="br0">&#123;</span>
            fetch<span class="br0">&#40;</span>WASM_URL<span class="br0">&#41;</span>.then<span class="br0">&#40;</span>resp =&gt;
                resp.arrayBuffer<span class="br0">&#40;</span><span class="br0">&#41;</span>
            <span class="br0">&#41;</span>.then<span class="br0">&#40;</span>bytes =&gt;
                WebAssembly.instantiate<span class="br0">&#40;</span>bytes, <span style="color: #0000ff;">go</span>.importObject<span class="br0">&#41;</span>.then<span class="br0">&#40;</span>function <span class="br0">&#40;</span>obj<span class="br0">&#41;</span> <span class="br0">&#123;</span>
                    wasm = obj.instance;
                    <span style="color: #0000ff;">go</span>.run<span class="br0">&#40;</span>wasm<span class="br0">&#41;</span>;
                    wasmReady = <span style="color: #339933;">true</span>;
                <span class="br0">&#125;</span><span class="br0">&#41;</span>
            <span class="br0">&#41;</span>
        <span class="br0">&#125;</span>
    &lt;/script&gt;</pre></td></tr></table></code><hr />
</div><br />
<br />
<br />
<b><font size="3">Dépannage</font></b><br />
<br />
<b>Le fichier WASM ne se charge pas</b><br />
<br />
Cela fonctionne automatiquement dans Github Pages, mais localement, vous devez servir les fichiers via HTTP. Vous pouvez utiliser http-server pour cela :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code">npx http-server ./public -p 8080</code><hr />
</div><br />
<br />
Rendez-vous ensuite sur [c]http://localhost:8080[/c dans votre navigateur.<br />
<br />
<b><font size="3">Conclusion</font></b><br />
<br />
J'ai pris beaucoup de plaisir à créer ces jeux et j'espère que vous trouverez intéressant de voir comment ils fonctionnent. J'espère également que cela vous sera utile pour créer vos propres jeux ! Si vous avez des questions, n'hésitez pas à me contacter.<br />
<br />
<div style="text-align: center;"><img src="https://www.developpez.net/forums/attachments/p670431d1758266511/autres-langages/autres-langages/go/creer-jeux-go-3-mois-llm-contre-3-jours-llm-mariano-gappa/7.jpg/" border="0" alt="Nom : 7.jpg
Affichages : 4042
Taille : 103,3 Ko"  style="float: CONFIG" /></div><br />
<b>Source</b> : <a rel="nofollow" href="https://marianogappa.github.io/software/2025/08/24/i-made-two-card-games-in-go/" target="_blank">&quot;Making Games in Go: 3 Months Without LLMs vs 3 Days With LLMs!&quot;</a><br />
<br />
<b>Et vous ?</b><br />
<br />
:fleche: Pensez-vous que cette méthode est crédible ou pertinente ?<br />
:fleche: Quel est votre avis sur le sujet ?<br />
<br />
<b>Voir aussi :</b><br />
<br />
:fleche: <a href="https://programmation.developpez.com/actu/364901/Le-langage-Go-souffle-ses-15-bougies-et-atteint-sa-position-la-plus-haute-sur-l-indice-Tiobe-Google-annonce-que-le-nombre-d-utilisateurs-de-Go-a-plus-que-triple-au-cours-des-cinq-dernieres-annees/" target="_blank">Le langage Go souffle ses 15 bougies et atteint sa position la plus haute sur l'indice Tiobe. Google annonce que le nombre d'utilisateurs de Go a plus que triplé au cours des cinq dernières années</a><br />
<br />
:fleche: <a href="https://intelligence-artificielle.developpez.com/actu/372199/Comment-j-utilise-les-LLM-en-tant-qu-ingenieur-logiciel-par-sean-goedecke/" target="_blank">Comment j'utilise les LLM en tant qu'ingénieur logiciel, par sean goedecke</a><br />
<br />
:fleche: <a href="https://intelligence-artificielle.developpez.com/actu/372192/Le-jour-ou-j-ai-appris-a-l-IA-a-comprendre-le-code-comme-un-developpeur-senior-par-Namanyay-Goel/" target="_blank">Le jour où j'ai appris à l'IA à comprendre le code comme un développeur senior, par Namanyay Goel</a></div>


	<div style="padding:10px">

	

	
		<fieldset class="fieldset">
			<legend>Images attachées</legend>
				<div style="padding:10px">
				<img class="attach" src="https://www.developpez.net/forums/attachments/p670424d1758266479/autres-langages/autres-langages/go/creer-jeux-go-3-mois-llm-contre-3-jours-llm-mariano-gappa/0.jpg/" alt="" />&nbsp;<img class="attach" src="https://www.developpez.net/forums/attachments/p670425d1758266482/autres-langages/autres-langages/go/creer-jeux-go-3-mois-llm-contre-3-jours-llm-mariano-gappa/1.jpg/" alt="" />&nbsp;<img class="attach" src="https://www.developpez.net/forums/attachments/p670426d1758266486/autres-langages/autres-langages/go/creer-jeux-go-3-mois-llm-contre-3-jours-llm-mariano-gappa/2.jpg/" alt="" />&nbsp;<img class="attach" src="https://www.developpez.net/forums/attachments/p670427d1758266490/autres-langages/autres-langages/go/creer-jeux-go-3-mois-llm-contre-3-jours-llm-mariano-gappa/3.jpg/" alt="" />&nbsp;<img class="attach" src="https://www.developpez.net/forums/attachments/p670428d1758266495/autres-langages/autres-langages/go/creer-jeux-go-3-mois-llm-contre-3-jours-llm-mariano-gappa/4.jpg/" alt="" />&nbsp;<img class="attach" src="https://www.developpez.net/forums/attachments/p670429d1758266500/autres-langages/autres-langages/go/creer-jeux-go-3-mois-llm-contre-3-jours-llm-mariano-gappa/5.jpg/" alt="" />&nbsp;<img class="attach" src="https://www.developpez.net/forums/attachments/p670430d1758266505/autres-langages/autres-langages/go/creer-jeux-go-3-mois-llm-contre-3-jours-llm-mariano-gappa/6.jpg/" alt="" />&nbsp;<img class="attach" src="https://www.developpez.net/forums/attachments/p670431d1758266511/autres-langages/autres-langages/go/creer-jeux-go-3-mois-llm-contre-3-jours-llm-mariano-gappa/7.jpg/" alt="" />&nbsp;
			</div>
		</fieldset>
	

	

	

	</div>
]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f1999/autres-langages/autres-langages/go/">Go</category>
			<dc:creator>Mariano Gappa</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2179348/autres-langages/autres-langages/go/creer-jeux-go-3-mois-llm-contre-3-jours-llm-mariano-gappa/</guid>
		</item>
	</channel>
</rss>
