{"id":71628,"date":"2020-02-27T08:51:24","date_gmt":"2020-02-27T05:51:24","guid":{"rendered":"https:\/\/prohoster.info\/blog\/aleksej-grachyov-go-frontend"},"modified":"2020-03-03T16:14:16","modified_gmt":"2020-03-03T13:14:16","slug":"aleksej-grachyov-go-frontend","status":"publish","type":"post","link":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/aleksej-grachyov-go-frontend","title":{"rendered":"Alexey Grachyev : Go Frontend","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Kyiv Go Meetup Mai 2018 :<\/p>\n<p><img decoding=\"async\" alt=\"Alexey Grachyev : Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/9974ab1db5347a41e4ec5110c3d2ef56.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>Animateur :<\/b> \u2013 Bonjour \u00e0 tous ! Merci d'\u00eatre ici ! Aujourd'hui, nous avons deux intervenants officiels \u2013 Alexe et Vanya. Il y en aura deux autres si nous avons le temps. Le premier intervenant est Alexe Gratchev, qui va nous parler de GopherJS.<\/p>\n<p><b>Alexe Gratchev (ci-apr\u00e8s \u2013 AG) :<\/b> \u2013 Je suis d\u00e9veloppeur Go et j'\u00e9cris des services web en Go. Parfois, je dois m'attaquer au front-end, parfois je dois y mettre les mains. Je veux partager mon exp\u00e9rience et mes recherches sur Go dans le front-end.<\/p>\n<p>La l\u00e9gende est la suivante : d'abord, nous allons parler de pourquoi nous voulons ex\u00e9cuter Go dans le front-end, puis nous aborderons comment cela peut \u00eatre fait. Il y a deux voies \u2013 Web Assembly et GopherJS. Voyons o\u00f9 en sont ces solutions et ce qui peut \u00eatre fait.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Qu'est-ce qui ne va pas avec le front-end ?<\/h3>\n<p>\nTout le monde est d'accord, tout va bien avec le front-end ?<\/p>\n<p><img decoding=\"async\" alt=\"Alexey Grachyev : Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/065119e699053306072b1d7aa3183b34.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPas assez de tests ? Compilation lente ? \u00c9cosyst\u00e8me ? Tr\u00e8s bien.<\/p>\n<p>En ce qui concerne le front-end, j'aime une citation d'un des d\u00e9veloppeurs front-end dans son livre :<\/p>\n<p><img decoding=\"async\" alt=\"Alexey Grachyev : Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/e69eba4fc073c0b59789859c94ba29f2.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIl n'y a pas de syst\u00e8me de types en Javascript. Je vais maintenant \u00e9noncer les probl\u00e8mes que j'ai rencontr\u00e9s au cours de mon travail et expliquer comment ils sont r\u00e9solus.<\/p>\n<p>On ne peut pas vraiment appeler le syst\u00e8me de types un syst\u00e8me de types en Javascript \u2013 il y a des cha\u00eenes qui d\u00e9signent le type d'objet, mais en r\u00e9alit\u00e9, cela n'a rien \u00e0 voir avec les types. Ce probl\u00e8me est r\u00e9solu par TypeScript (une surcouche de Javascript) et Flow (v\u00e9rificateur de types statiques pour Javascript). En fait, le front-end a d\u00e9j\u00e0 abouti \u00e0 une solution au probl\u00e8me du mauvais syst\u00e8me de types en Javascript.<\/p>\n<p><img decoding=\"async\" alt=\"Alexey Grachyev : Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/257542cbfd2e316fbe0a0033056fff6f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIl n'existe pas de biblioth\u00e8que standard dans le navigateur \u2013 il y a quelques objets int\u00e9gr\u00e9s et des fonctions \"magiques\" dans les navigateurs. Mais en ce qui concerne Javascript, la biblioth\u00e8que standard n'existe pas. Ce probl\u00e8me a d\u00e9j\u00e0 \u00e9t\u00e9 r\u00e9solu par jQuery (tout le monde utilisait jQuery avec tous les prototypes, helpers, fonctions n\u00e9cessaires au fonctionnement). Maintenant, tout le monde utilise Lodash :<\/p>\n<p><img decoding=\"async\" alt=\"Alexey Grachyev : Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/4eae8a8f19776028bd88fe8f7a751605.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nL'enfer des callbacks. Je pense que tout le monde a vu du code Javascript il y a environ 5 ans, et c'\u00e9tait comme des \"nouilles\" avec un enchev\u00eatrement incroyable de callbacks. Maintenant, ce probl\u00e8me a \u00e9t\u00e9 r\u00e9solu (avec la sortie d'ES-15 ou ES-16), des promesses (promises) ont \u00e9t\u00e9 ajout\u00e9es \u00e0 Javascript et tout le monde a pu respirer un peu plus facilement pendant un moment.<\/p>\n<p><img decoding=\"async\" alt=\"Alexey Grachyev : Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/96c574a880ad97e0802ae3006a60cee6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJusqu'\u00e0 ce que vienne l'enfer des promesses... Je ne sais pas comment l'industrie du front-end s'y prend, mais elle continue de s'enfermer dans des recoins \u00e9tranges. Ils ont r\u00e9ussi \u00e0 cr\u00e9er un hell avec des \"promesses\". Ensuite, ils ont r\u00e9solu ce probl\u00e8me en ajoutant un nouveau primitif \u2013 async\/await :<\/p>\n<p><img decoding=\"async\" alt=\"Alexey Grachyev : Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/7c0679babbea4583de924292893d805c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLe probl\u00e8me avec l'asynchronicit\u00e9 est r\u00e9solu. Async\/await est un primitif assez populaire dans diff\u00e9rents langages. En Python et dans d'autres, il existe une telle approche \u2013 elle est tr\u00e8s bonne. Le probl\u00e8me est r\u00e9solu.<\/p>\n<p>Quel probl\u00e8me n'est pas r\u00e9solu ? La complexit\u00e9 croissante des frameworks en progression g\u00e9om\u00e9trique, la complexit\u00e9 de l'\u00e9cosyst\u00e8me et des programmes eux-m\u00eames.<\/p>\n<p><img decoding=\"async\" alt=\"Alexey Grachyev : Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/617fbc72e9e059bf608a48c84c5328f9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<ul>\n<li>La syntaxe de Javascript est quelque peu \u00e9trange. Nous connaissons tous les probl\u00e8mes de la addition entre tableaux et objets et d'autres particularit\u00e9s.<\/li>\n<li>Javascript est multi-paradigme. Actuellement, c'est un syst\u00e8me particuli\u00e8rement pertinent, car l'\u00e9cosyst\u00e8me est tr\u00e8s vaste :\n<ul>\n<li>tout le monde \u00e9crit dans diff\u00e9rents styles \u2013 certains \u00e9crivent de mani\u00e8re structur\u00e9e, d'autres de mani\u00e8re fonctionnelle, diff\u00e9rents d\u00e9veloppeurs \u00e9crivent diff\u00e9remment ;<\/li>\n<li>des paradigmes diff\u00e9rents provenant de diff\u00e9rents packages, lorsque vous utilisez diff\u00e9rents paquets ;<\/li>\n<li>il y a beaucoup de 'divertissement' avec la programmation fonctionnelle en Javascript \u2013 la biblioth\u00e8que rambda est apparue et maintenant, personne ne peut lire les programmes \u00e9crits avec cette biblioth\u00e8que.<\/li>\n<\/ul>\n<p>\n<\/li>\n<li>Tout cela a un grand impact sur l'\u00e9cosyst\u00e8me, qui s'est incroyablement d\u00e9velopp\u00e9. Les paquets ne sont pas compatibles entre eux : certains utilisent des promesses, d'autres async\/await, d'autres encore des callbacks. En plus, ils sont \u00e9crits dans diff\u00e9rents paradigmes !<\/li>\n<li>Cela m\u00e8ne \u00e0 une difficult\u00e9 de maintenance des projets. Il est difficile de trouver un bug si vous ne pouvez pas lire le code.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Qu'est-ce que le Web Assembly ?<\/h3>\n<p>\nLes braves gars de la Mozilla Foundation et d'autres entreprises ont invent\u00e9 ce qu'on appelle le Web Assembly. Qu'est-ce que c'est ?<\/p>\n<p><img decoding=\"async\" alt=\"Alexey Grachyev : Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/9ca5b1e0b7646ec7d6fa751d77780b41.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<ul>\n<li>C'est une machine virtuelle int\u00e9gr\u00e9e dans le navigateur, qui supporte un format binaire.<\/li>\n<li>Les programmes binaires y arrivent, s'ex\u00e9cutent presque nativement, c'est-\u00e0-dire que le navigateur n'a pas besoin de parser tout le 'm\u00e9li-m\u00e9lo' du code javascript \u00e0 chaque fois.<\/li>\n<li>Tous les navigateurs ont d\u00e9clar\u00e9 leur support.<\/li>\n<li>Puisque c'est du bytecode, on peut \u00e9crire un compilateur pour n'importe quel langage.<\/li>\n<li>Les quatre principaux navigateurs sont d\u00e9j\u00e0 livr\u00e9s avec un support pour le Web Assembly.<\/li>\n<li>Nous attendons bient\u00f4t un support natif dans Go. Une nouvelle architecture a d\u00e9j\u00e0 \u00e9t\u00e9 ajout\u00e9e : GOARCH=wasm GOOS=js (bient\u00f4t). Pour l\u2019instant, autant que je comprends, cela n'est pas fonctionnel, mais il y a une d\u00e9claration indiquant que cela sera certainement ajout\u00e9 dans Go.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Que faire maintenant ? GopherJS<\/h3>\n<p>\nTant que nous n'avons pas le support du Web Assembly, il existe un transpileur nomm\u00e9 GopherJS.<\/p>\n<p><img decoding=\"async\" alt=\"Alexey Grachyev : Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/067c1b605b220c4aeed103915daacca4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<ul>\n<li>Le code Go est transpile dans du javascript 'pur'.<\/li>\n<li>Cela fonctionne dans tous les navigateurs \u2013 il n'y a pas de nouvelles fonctionnalit\u00e9s qui ne sont prises en charge que par les navigateurs modernes (c'est du Vanilla JS, qui fonctionne sur tout ce qui existe).<\/li>\n<li>Il existe un support pour presque tout ce qui se trouve dans Go, y compris les goroutines et les canaux\u2026 \u2013 tout ce que nous aimons et connaissons.<\/li>\n<li>Presque toute la biblioth\u00e8que standard est support\u00e9e, \u00e0 l'exception des paquets qui n'ont pas de sens \u00e0 supporter dans le navigateur : syscall, interactions r\u00e9seau (il y a un client net\/http, mais pas de serveur, et le client est \u00e9mul\u00e9 via XMLHttpRequest). En g\u00e9n\u00e9ral, toute la biblioth\u00e8que standard est accessible \u2013 la voici dans le navigateur, voici la stdlib Go que nous aimons.<\/li>\n<li>Tout l'\u00e9cosyst\u00e8me des paquets en Go, toutes les solutions tierces (template et autres) peuvent \u00eatre compil\u00e9s avec GopherJS et ex\u00e9cut\u00e9s dans le navigateur.<\/li>\n<\/ul>\n<p>\nObtenir GopherJS est tr\u00e8s facile \u2013 c'est un paquet Go ordinaire. Nous faisons go get, et nous avons la commande GopherJS pour construire l'application :<\/p>\n<p><img decoding=\"async\" alt=\"Alexey Grachyev : Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/4f96f9e437b532f9cb1a4f960a621293.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVoici un petit hello world\u2026<\/p>\n<p><img decoding=\"async\" alt=\"Alexey Grachyev : Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/e4b56385a6cac97fc75b09584da1bfbb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u2026Un programme Go ordinaire, un paquet fmt de la biblioth\u00e8que standard et Binding Js, pour acc\u00e9der \u00e0 l'API du navigateur. Println sera finalement transform\u00e9 en console log et le navigateur affichera \u00ab Hello gophers \u00bb ! C'est aussi simple que \u00e7a : nous faisons GopherJS build \u2013 ex\u00e9cutons dans le navigateur \u2013 tout fonctionne !<\/p>\n<h3>Qu'est-ce qui existe actuellement ? Bindings<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Alexey Grachyev : Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/6adbc1f604580c3878775c45174444a2.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIl existe des bindings pour tous les frameworks js populaires :<\/p>\n<ul>\n<li>JQuery;<\/li>\n<li>Angular.js;<\/li>\n<li>D3.js pour cr\u00e9er des graphiques et travailler avec de grandes donn\u00e9es;<\/li>\n<li>React.js;<\/li>\n<li>VueJS;<\/li>\n<li>il y a m\u00eame un support pour Electron (c'est-\u00e0-dire que nous pouvons d\u00e9j\u00e0 \u00e9crire des applications de bureau sur \u00ab Electron \u00bb);<\/li>\n<li>et le plus amusant \u2013 c'est WebGL (nous pouvons cr\u00e9er des applications holographiques, y compris des jeux avec des graphismes 3D, de la musique et tous les extras);<\/li>\n<li>et beaucoup d'autres bindings pour tous les frameworks et biblioth\u00e8ques javascript populaires.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Framework<\/h3>\n<p><\/p>\n<ol>\n<li>Il existe d\u00e9j\u00e0 un framework web sp\u00e9cialement con\u00e7u pour GopherJS \u2013 Vecty. C'est un v\u00e9ritable \u00e9quivalent de React.js, mais d\u00e9velopp\u00e9 en Go, avec les sp\u00e9cificit\u00e9s de GopherJS.<\/li>\n<li>Il y a des moteurs de jeu (surprise !). J'ai trouv\u00e9 les deux plus populaires :\n<ul>\n<li>Engo;<\/li>\n<li>Ebiten.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>\nJe vais montrer quelques exemples, \u00e0 quoi cela ressemble et ce que nous pouvons d\u00e9j\u00e0 \u00e9crire en Go :<\/p>\n<p><img decoding=\"async\" alt=\"Alexey Grachyev : Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/53365146c12b320fbf05334bdc6a79e5.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOu une telle option (je n'ai pas trouv\u00e9 de FPS 3D, mais peut-\u00eatre qu'il y en a) :<\/p>\n<p><img decoding=\"async\" alt=\"Alexey Grachyev : Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/b1c0a9d6d91ad8a10a9b784cd8c7b1d0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Que proposez-vous ?<\/h3>\n<p>\nActuellement, l'industrie du frontend est dans un tel \u00e9tat, que tous les langages qui auparavant pleuraient \u00e0 cause de Javascript se jetteront maintenant l\u00e0-dedans. Maintenant, tous seront compil\u00e9s en \u00ab Web Assembly \u00bb. Que devons-nous faire pour occuper une place respectable l\u00e0-bas en tant que \u00ab gophers \u00bb ?<\/p>\n<p><img decoding=\"async\" alt=\"Alexey Grachyev : Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/32c4a03f7a31def833942af6e59c70cb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDans Go, c'est traditionnellement consid\u00e9r\u00e9 comme un langage de programmation syst\u00e8me, et il n'y a pratiquement pas de biblioth\u00e8ques pour travailler avec l'interface utilisateur. Il y a quelques choses, mais c'est \u00e0 moiti\u00e9 abandonn\u00e9, \u00e0 moiti\u00e9 non fonctionnel.<\/p>\n<p>Et voici une bonne occasion de cr\u00e9er des biblioth\u00e8ques UI en Go qui fonctionneront sur GopherJS ! On peut enfin \u00e9crire notre propre framework ! C'est le moment de cr\u00e9er un framework, et il sera l'un des premiers et adoptera t\u00f4t, et vous serez une star (si c'est un bon framework).<\/p>\n<p>On peut adapter une multitude de paquets qui existent d\u00e9j\u00e0 dans l'\u00e9cosyst\u00e8me Go aux sp\u00e9cificit\u00e9s du navigateur (par exemple, un moteur de templates). Ils fonctionneront d\u00e9j\u00e0, et on peut cr\u00e9er des enveloppes pratiques pour rendre facilement du contenu directement dans le navigateur. De plus, on peut cr\u00e9er un service qui sait rendre la m\u00eame chose sur le serveur et sur le frontend, en utilisant le m\u00eame code \u2013 tout ce que les d\u00e9veloppeurs frontend appr\u00e9cient (mais d\u00e9sormais en Go).<\/p>\n<p>On peut \u00e9crire un jeu ! Juste pour le plaisir\u2026<\/p>\n<p>C'est tout pour moi.<\/p>\n<p><img decoding=\"async\" alt=\"Alexey Grachyev : Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/ba08e0e65de0898e4f53abd00abb6dab.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Questions<\/h3>\n<p>\n<b>Question (ci-apr\u00e8s \u2013 Q) :<\/b> \u2013 Est-ce que j'\u00e9cris en Go ou en Js ?<\/p>\n<p><b>AG :<\/b> \u2013 Tu \u00e9cris en Go pour les routines, les canaux, les structures, l'embedding \u2013 tout \u00e7a\u2026 Tu t'inscris \u00e0 un \u00e9v\u00e9nement, tu y passes une fonction.<\/p>\n<p><b>Q :<\/b> \u2013 Donc j'\u00e9cris en \"Javascript pur\" ?<\/p>\n<p><b>AG :<\/b> \u2013 Non, tu \u00e9cris plut\u00f4t en Go et tu te connectes \u00e0 l'API du navigateur (l'API n'a pas chang\u00e9). Tu peux \u00e9crire tes propres enveloppes pour que des messages arrivent dans le canal \u2013 ce n'est pas compliqu\u00e9.<\/p>\n<p><b>Q :<\/b> \u2013 Qu'en est-il du mobile ?<\/p>\n<p><b>AG :<\/b> \u2013 J'ai clairement vu : il existe des bindings pour le patch Cordova, qui lancent Js. Quant \u00e0 React Native \u2013 je ne sais pas ; il y en a peut-\u00eatre, ou pas (je ne me suis pas trop int\u00e9ress\u00e9). Le moteur de jeu N-go prend en charge les applications mobiles \u2013 \u00e0 la fois iOS et Android.<\/p>\n<p><b>Q :<\/b> \u2013 Questions sur le Web Assembly. Cela occupe de plus en plus de place, malgr\u00e9 la compression, la \"zipp\u00e9it\u00e9\"\u2026 Ne d\u00e9truirons-nous pas ainsi le monde du frontend encore plus ?<\/p>\n<p><b>AG :<\/b> \u2013 Web Assembly est un format binaire, et par d\u00e9faut, un binaire ne peut pas \u00eatre plus gros que du texte dans la version finale\u2026 Tu es tent\u00e9 par le runtime, mais c'est comme tirer une biblioth\u00e8que Javascript standard lorsque tu ne l'as pas, donc nous utilisons une sorte de Lodash. Je ne sais pas combien Lodash prend.<\/p>\n<p><b>Q :<\/b> \u2013 Clairement moins que le runtime\u2026<\/p>\n<p><b>AG :<\/b> \u2013 En \"Javascript pur\" ?<\/p>\n<p><b>Q :<\/b> \u2013 Oui. Nous le compressons avant de l'envoyer\u2026<\/p>\n<p><b>AG :<\/b> \u2013 Mais c'est un texte... En gros, un m\u00e9gaoctet, c'est beaucoup, mais c'est tout (tu as tout ton runtime). Ensuite, tu \u00e9cris ta logique m\u00e9tier, qui augmentera de 1 % ton binaire. Pour l'instant, je ne vois pas que cela affecte le frontend. D'autant plus que Web Assembly fonctionnera plus rapidement que Javascript pour une raison \u00e9vidente : il n'a pas besoin d'\u00eatre analys\u00e9.<\/p>\n<p><b>Q :<\/b> \u2013 C'est encore un point discutable... Il n'y a pas encore de r\u00e9alisation \u00e9talon de \u00ab Vasma \u00bb (Web Assembly), donc on ne peut pas juger de mani\u00e8re d\u00e9finitive. Conceptuellement, oui : nous comprenons tous que le binaire doit \u00eatre plus rapide, mais la mise en \u0153uvre actuelle de V8 est tr\u00e8s efficace.<\/p>\n<p><b>AG :<\/b> \u2013 Oui.<\/p>\n<p><b>Q :<\/b> \u2013 La compilation fonctionne vraiment tr\u00e8s bien l\u00e0-bas et il n'est pas certain qu'il y aura un grand avantage.<\/p>\n<p><b>AG :<\/b> \u2013 Web Assembly est \u00e9galement d\u00e9velopp\u00e9 par de grands acteurs.<\/p>\n<p><b>Q :<\/b> \u2013 Pour l'instant, il me semble encore difficile de porter un jugement sur Web Assembly. Cela fait des ann\u00e9es que nous en discutons, mais les r\u00e9alisations concr\u00e8tes que l'on peut toucher sont rares.<\/p>\n<p><b>AG :<\/b> \u2013 Peut-\u00eatre. Nous verrons bien.<\/p>\n<p><b>Q :<\/b> \u2013 Nous n'avons pas de probl\u00e8mes c\u00f4t\u00e9 backend... Peut-\u00eatre devrions-nous laisser ces probl\u00e8mes au frontend ? Pourquoi s'y m\u00ealer ?<\/p>\n<p><b>AG :<\/b> \u2013 Nous devons maintenir une \u00e9quipe de frontenders.<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"xF2xUKIk2MQ\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/xF2xUKIk2MQ\/hqdefault.jpg\" alt=\"Lire la vid\u00e9o\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<h3>Un peu de publicit\u00e9 \ud83d\ude42<\/h3>\n<p>\nMerci de rester avec nous. Aimez-vous nos articles ? Voulez-vous voir plus de contenu int\u00e9ressant ? Soutenez-nous en passants une commande ou en nous recommandant \u00e0 des amis, <noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/cloudvps\/nl\">VPS cloud pour d\u00e9veloppeurs \u00e0 partir de 4,99 $<\/a><\/noindex>, <b>un \u00e9quivalent unique des serveurs d'entr\u00e9e de gamme, con\u00e7u pour vous :<\/b> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/347386\/\">Toute la v\u00e9rit\u00e9 sur le VPS (KVM) E5-2697 v3 (6 c\u0153urs) 10 Go DDR4 480 Go SSD 1 Gbps \u00e0 partir de 19 $ ou comment bien diviser un serveur ?<\/a><\/noindex> (options disponibles avec RAID1 et RAID10, jusqu'\u00e0 24 c\u0153urs et jusqu'\u00e0 40 Go DDR4).<\/p>\n<p><b>Dell R730xd deux fois moins cher dans le data center Equinix Tier IV \u00e0 Amsterdam ?<\/b> Uniquement chez nous <b><noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/serversnl\">2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64Go DDR4 4x960Go SSD 1Gbps 100 To \u00e0 partir de 199 $<\/a><\/noindex> aux Pays-Bas ! <b>Dell R420 \u2014 2x E5-2430 2.2GHz 6C 128Go DDR3 2x960Go SSD 1Gbps 100To \u2014 \u00e0 partir de 99 $ !<\/b><\/b> Lisez sur <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/329618\/\">Comment construire une infrastructure de classe entreprise avec des serveurs Dell R730xd E5-2650 v4 co\u00fbtant 9000 euros pour des clopinettes ?<\/a><\/noindex><br \/>\n<br \/>Source : <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/ua-hosting\/blog\/489636\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>Kyiv Go Meetup May 2018: \u0412\u0435\u0434\u0443\u0449\u0438\u0439: \u2013 \u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u0421\u043f\u0430\u0441\u0438\u0431\u043e, \u0447\u0442\u043e \u0432\u044b \u0437\u0434\u0435\u0441\u044c \u0441\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c! \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0443 \u043d\u0430\u0441 \u0434\u0432\u0430 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u043f\u0438\u043a\u0435\u0440\u0430 \u2013 \u041b\u0451\u0448\u0430 \u0438 \u0412\u0430\u043d\u044f. \u0411\u0443\u0434\u0435\u0442 \u0435\u0449\u0451 \u0434\u0432\u0430, \u0435\u0441\u043b\u0438 \u0443 \u043d\u0430\u0441 \u0445\u0432\u0430\u0442\u0438\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u041f\u0435\u0440\u0432\u044b\u0439 \u0441\u043f\u0438\u043a\u0435\u0440 \u2013 \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u0413\u0440\u0430\u0447\u0451\u0432, \u043e\u043d \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u0442 \u043d\u0430\u043c \u043e GopherJS. \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u0413\u0440\u0430\u0447\u0451\u0432 (\u0434\u0430\u043b\u0435\u0435 \u2013 \u0410\u0413): \u2013 \u042f \u2013 Go-\u0434\u0435\u0432\u0435\u043b\u043e\u043f\u0435\u0440, \u0438 \u044f \u043f\u0438\u0448\u0443 \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0438\u0441\u044b [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":71629,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-71628","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"Kyiv Go Meetup May 2018: \u0412\u0435\u0434\u0443\u0449\u0438\u0439: \u2013 \u0412\u0441\u0435\u043c.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/aleksej-grachyov-go-frontend\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u0413\u0440\u0430\u0447\u0451\u0432: Go Frontend | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"Kyiv Go Meetup May 2018: \u0412\u0435\u0434\u0443\u0449\u0438\u0439: \u2013 \u0412\u0441\u0435\u043c.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/aleksej-grachyov-go-frontend\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-02-27T05:51:24+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-03-03T13:14:16+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Alexey Grachev : Go Frontend | ProHoster","description":"Kyiv Go Meetup Mai 2018 : Animateur : \u2013 Bonjour \u00e0 tous.","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/aleksej-grachyov-go-frontend","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u0413\u0440\u0430\u0447\u0451\u0432: Go Frontend | ProHoster","og:description":"Kyiv Go Meetup May 2018: \u0412\u0435\u0434\u0443\u0449\u0438\u0439: \u2013 \u0412\u0441\u0435\u043c.","og:url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/aleksej-grachyov-go-frontend","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-02-27T05:51:24+00:00","article:modified_time":"2020-03-03T13:14:16+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"71628","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 18:58:26","updated":"2022-09-27 20:58:26","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/71628","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=71628"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/71628\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/71629"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=71628"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=71628"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=71628"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}