{"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\/nl\/blog\/administrirovanie\/aleksej-grachyov-go-frontend","title":{"rendered":"Aleksej Gra\u010dev: Go Frontend","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Kyiv Go Meetup mei 2018:<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010dev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/9974ab1db5347a41e4ec5110c3d2ef56.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>Presentator:<\/b> \u2013 Hallo allemaal! Dank dat jullie hier zijn! Vandaag hebben we twee offici\u00eble sprekers \u2013 Ljoesja en Vania. Er komen er nog twee, als we tijd genoeg hebben. De eerste spreker is Alexej Gra\u010dev, hij zal ons vertellen over GopherJS.<\/p>\n<p><b>Alexej Gra\u010dev (verder \u2013 AG):<\/b> \u2013 Ik ben een Go-ontwikkelaar en schrijf webservices in Go. Soms moet ik met de frontend bezig zijn, soms moet ik daar zelf aan de slag. Ik wil mijn ervaringen en onderzoeken met Go aan de frontend delen.<\/p>\n<p>Het verhaal is als volgt: eerst bespreken we waarom we Go aan de frontend willen draaien, daarna bespreken we hoe we dat kunnen doen. Er zijn twee wegen \u2013 Web Assembly en GopherJS. Laten we kijken in welke staat deze oplossingen verkeren en wat we ermee kunnen doen.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Wat is er mis met de frontend?<\/h3>\n<p>\nIs iedereen het erover eens dat alles goed gaat met de frontend?<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010dev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/065119e699053306072b1d7aa3183b34.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTe weinig tests? Langzame builds? Ecosysteem? Goed.<\/p>\n<p>Wat betreft de frontend houd ik van een citaat van een van de frontend-ontwikkelaars in zijn boek:<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010dev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/e69eba4fc073c0b59789859c94ba29f2.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJavaScript heeft geen typesysteem. Nu ga ik de problemen opsommen waarmee ik in mijn werk te maken heb gehad en uitleggen hoe ze worden aangepakt.<\/p>\n<p>Het typesysteem is eigenlijk moeilijk te beschrijven als een typesysteem in JavaScript \u2013 er zijn strings die het type van een object aangeven, maar dat heeft in feite niets met types te maken. Dit probleem is opgelost in TypeScript (een uitbreiding van JavaScript) en Flow (een static type checker voor JavaScript). Eigenlijk heeft de frontend al een oplossing gevonden voor het probleem van het slechte typesysteem in JavaScript.<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010dev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/257542cbfd2e316fbe0a0033056fff6f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEr is eigenlijk geen standaardbibliotheek in de browser \u2013 er zijn een aantal ingebouwde objecten en \"magische\" functies in de browsers. Maar in JavaScript is er als zodanig geen standaardbibliotheek beschikbaar. Dit probleem werd ooit opgelost door jQuery (iedereen gebruikte jQuery met alle prototypes, helpers en functies die nodig zijn voor het werk). Tegenwoordig gebruikt iedereen Lodash:<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010dev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/4eae8a8f19776028bd88fe8f7a751605.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCallback hell. Ik denk dat iedereen de JavaScript-code van ongeveer 5 jaar geleden wel heeft gezien, die leek op \"noodle\" van een ongelooflijke verwevenheid van callbacks. Tegenwoordig is dit probleem opgelost (met de release van ES-15 of ES-16), er zijn beloftes (promises) aan JavaScript toegevoegd en dat maakte het voor iedereen iets gemakkelijker.<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010dev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/96c574a880ad97e0802ae3006a60cee6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTot de komst van Promise hell\u2026 Ik weet niet hoe de frontend-industrie het voor elkaar krijgt, maar ze drijven zichzelf voortdurend in vreemde situaties. Zelfs met \"promises\" hebben ze hell weten te cre\u00ebren. Toen hebben ze dat probleem opgelost door een nieuwe primitief toe te voegen \u2013 async\/await:<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010dev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/7c0679babbea4583de924292893d805c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMet async is het probleem opgelost. Async\/await is een vrij populaire primitief in verschillende talen. In Python en andere talen is er een dergelijke benadering - het is behoorlijk goed. Het probleem is opgelost.<\/p>\n<p>Wat is er nog niet opgelost? De exponentieel groeiende complexiteit van frameworks, de complexiteit van ecosystemen en de software zelf.<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010dev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/617fbc72e9e059bf608a48c84c5328f9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<ul>\n<li>De syntaxis van Javascript is een beetje vreemd. We kennen allemaal de problemen met het samenvoegen van een array en een object en andere leukigheden.<\/li>\n<li>Javascript is multiparadigma. Dit is nu vooral een actuele kwestie, omdat het ecosysteem enorm groot is:\n<ul>\n<li>iedereen schrijft in verschillende stijlen - sommigen schrijven structureel, anderen functioneel, verschillende ontwikkelaars schrijven op verschillende manieren;<\/li>\n<li>uit verschillende pakketten (packages) komen verschillende paradigma's voort, wanneer je verschillende pakketten gebruikt;<\/li>\n<li>er is veel \"plezier\" met functioneel programmeren in Javascript - de rambda-bibliotheek is verschenen en nu kan niemand de programma's lezen die in deze bibliotheek zijn geschreven.<\/li>\n<\/ul>\n<p>\n<\/li>\n<li>Dit heeft een grote impact op het ecosysteem en het is ongelooflijk gegroeid. Pakketten zijn met elkaar incompatibel: sommigen gebruiken promises, sommigen async\/await, anderen callbacks. Ze schrijven ook in verschillende paradigma's!<\/li>\n<li>Dit leidt ertoe dat een project moeilijk te onderhouden is. Het is moeilijk om een bug te vinden als je de code niet kunt lezen.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Wat is Web Assembly?<\/h3>\n<p>\nDe dappere jongens van de Mozilla Foundation en een aantal andere bedrijven hebben iets bedacht dat Web Assembly heet. Wat is dat?<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010dev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/9ca5b1e0b7646ec7d6fa751d77780b41.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<ul>\n<li>Het is een virtuele machine die in de browser is ingebouwd en die een binair formaat ondersteunt.<\/li>\n<li>Binaire programma's worden daar naartoe gestuurd en worden praktisch native uitgevoerd, dat wil zeggen dat de browser niet elke keer de hele 'spaghetti' van javascript-code hoeft te parseren.<\/li>\n<li>Alle browsers hebben ondersteuning aangekondigd.<\/li>\n<li>Aangezien dit bytecode is, kan je een compiler voor elke taal schrijven.<\/li>\n<li>De vier belangrijkste browsers worden al geleverd met ondersteuning voor Web Assembly.<\/li>\n<li>We verwachten binnenkort native ondersteuning in Go. Deze nieuwe architectuur is al toegevoegd: GOARCH=wasm GOOS=js (binnenkort). Voorlopig, zoals ik begrijp, is het nog niet operationeel, maar er is een verklaring dat dit zeker in Go zal komen.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Wat te doen nu? GopherJS<\/h3>\n<p>\nTotdat we ondersteuning voor Web Assembly hebben, is er een transpiler genaamd GopherJS.<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010dev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/067c1b605b220c4aeed103915daacca4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<ul>\n<li>Code in Go wordt getranspiled naar 'schone' Javascript.<\/li>\n<li>Het wordt in alle browsers uitgevoerd - er zijn geen nieuwe functies die alleen door moderne browsers worden ondersteund (dit is Vanilla JS dat overal draait).<\/li>\n<li>Er is ondersteuning voor bijna alles wat er in Go is, inclusief goroutines en kanalen... - alles wat we zo liefhebben en kennen.<\/li>\n<li>Bijna de hele standaardbibliotheek is ondersteund, met uitzondering van die pakketten die geen zin hebben om in de browser te ondersteunen: syscall, netwerkinteracties (er is een net\/http-client, maar geen server, en de client wordt nagebootst via XMLHttpRequest). Over het algemeen is de hele standaardbibliotheek beschikbaar - hier is hij in de browser, hier is de stdlib Go, die we zo liefhebben.<\/li>\n<li>Het hele ecosysteem van pakketten in Go, alle derde partijen (sjablonen en dergelijke) kunnen worden gecompileerd met GopherJS en in de browser worden uitgevoerd.<\/li>\n<\/ul>\n<p>\nGopherJS is heel gemakkelijk te verkrijgen - het is een gewone Go-pakket. We doen go get, en dan hebben we de GopherJS-commando om de applicatie te bouwen:<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010dev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/4f96f9e437b532f9cb1a4f960a621293.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHier is zo'n klein hello world...<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010dev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/e4b56385a6cac97fc75b09584da1bfbb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n...Een gewone Go-programma, een gewoon fmt-pakket van de standaardbibliotheek en Binding Js om toegang te krijgen tot de browser-API. Println zal uiteindelijk worden omgezet in console log en de browser zal 'Hello gophers!' schrijven! Zo simpel is het: we doen GopherJS build - draaien in de browser - alles werkt!<\/p>\n<h3>Wat is er op dit moment beschikbaar? Bindings<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Aleksej Gra\u010dev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/6adbc1f604580c3878775c45174444a2.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEr zijn bindings voor alle populaire js-frameworks:<\/p>\n<ul>\n<li>JQuery;<\/li>\n<li>Angular.js;<\/li>\n<li>D3.js voor grafieken en het werken met grote data;<\/li>\n<li>React.js;<\/li>\n<li>VueJS;<\/li>\n<li>er is zelfs ondersteuning voor Electron (dat betekent dat we al desktopapplicaties kunnen schrijven op 'Electron');<\/li>\n<li>en het leukste is - dat is WebGL (we kunnen full-graphic applicaties maken, inclusief games met 3D-graphics, muziek en alle toeters en bellen);<\/li>\n<li>en nog veel meer bindings voor alle populaire javascript-frameworks en bibliotheken.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Framework<\/h3>\n<p><\/p>\n<ol>\n<li>Er is al een speciaal voor GopherJS ontwikkelde webframework - Vecty. Dit is een volwaardig alternatief voor React.js, maar dan ontwikkeld in Go, met de specificiteit van GopherJS.<\/li>\n<li>Er zijn game-engines (verrassend!). Ik heb twee van de meest populaire gevonden:\n<ul>\n<li>Engo;<\/li>\n<li>Ebiten.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>\nIk zal een paar voorbeelden tonen van hoe dit eruit ziet en wat er nu al geschreven kan worden in Go:<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010dev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/53365146c12b320fbf05334bdc6a79e5.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOf deze optie (ik heb geen 3D-shooter gevonden, maar misschien is die er):<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010dev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/b1c0a9d6d91ad8a10a9b784cd8c7b1d0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Wat stel ik voor?<\/h3>\n<p>\nDe front-end industrie bevindt zich nu in een staat waarin alle talen die eerder huilden om Javascript, zich nu zullen storten op het compileren naar 'Web Assembly'. Wat hebben we nodig om daar een waardige plek te veroveren als 'gophers'?<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010dev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/32c4a03f7a31def833942af6e59c70cb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIn Go, it is traditionally considered a system programming language, and there are almost no libraries for working with UI. There are some, but they are half-abandoned and half non-functional.<\/p>\n<p>And here it is \u2013 a good chance to create UI libraries in Go that will run on GopherJS! Finally, you can write your own framework! The time has come when you can write a framework that will be one of the first to gain early adoption, and you will be a star (if it's a good framework).<\/p>\n<p>You can adapt numerous existing packages from the Go ecosystem to the browser's specifics (for example, a template engine). They are already functional, and you can create convenient wrappers to easily render content right in the browser. Plus, you could create a service that can render the same thing on the server and the frontend using the same code \u2013 just like frontend developers love (only now in Go).<\/p>\n<p>You can write a game! Just for fun\u2026<\/p>\n<p>That's all from me.<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010dev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/ba08e0e65de0898e4f53abd00abb6dab.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Vragen<\/h3>\n<p>\n<b>Question (hereafter - Q):<\/b> \u2013 Am I writing in Go or in JS?<\/p>\n<p><b>AG:<\/b> \u2013 You are writing in Go routines, channels, structures, embedding \u2013 everything... You subscribe to an event, passing a function to it.<\/p>\n<p><b>V:<\/b> \u2013 So I am writing in \u2018bare\u2019 JS?<\/p>\n<p><b>AG:<\/b> \u2013 No, you write as if in Go and connect to the browser's API (the API itself hasn't changed). You can write your own wrappers so that messages come into the channel \u2013 it's not difficult.<\/p>\n<p><b>V:<\/b> \u2013 What about mobile?<\/p>\n<p><b>AG:<\/b> \u2013 I definitely saw: there are bindings for the Cordova patch that JS runs. As for React Native \u2013 I don\u2019t know; there may be some, or maybe not (I haven\u2019t looked into it much). The game engine N-go supports both mobile applications \u2013 iOS and Android.<\/p>\n<p><b>V:<\/b> \u2013 A question about Web Assembly. It is taking up more and more space, despite compression and being \u2018zipped\u2019... Are we not killing the frontend world even more this way?<\/p>\n<p><b>AG:<\/b> \u2013 Web Assembly is a binary format, and by default, binaries cannot be larger than text in the final release... You are drawn to the runtime, but it's the same as pulling in the standard JavaScript library when it\u2019s not there, which is why we use some Lodash. I don't know how much Lodash takes up.<\/p>\n<p><b>V:<\/b> \u2013 Clearly less than the runtime...<\/p>\n<p><b>AG:<\/b> \u2013 In \u2018pure\u2019 JavaScript?<\/p>\n<p><b>V:<\/b> \u2013 Yes. We compress it before sending...<\/p>\n<p><b>AG:<\/b> \u2013 Maar dit is gewoon tekst... Over het algemeen is een megabyte veel, maar dat is alles (je hebt de volledige runtime). Vervolgens schrijf je je bedrijfslogica die je binary met 1% verhoogt. Tot nu toe zie ik niet dat dit de frontend schaadt. Bovendien zal Web Assembly sneller werken dan Javascript om een voor de hand liggende reden \u2013 het hoeft niet geparsed te worden.<\/p>\n<p><b>V:<\/b> \u2013 Het is nog een discutabel punt... Er is nog geen standaardimplementatie van 'Wasmer' (Web Assembly) die ons in staat stelt om definitieve conclusies te trekken. Conceptueel klopt het: we begrijpen allemaal dat de binary sneller moet zijn, maar de huidige implementatie van V8 is heel effici\u00ebnt.<\/p>\n<p><b>AG:<\/b> \u2013 Ja.<\/p>\n<p><b>V:<\/b> \u2013 De compilatie daar werkt echt heel goed en het is niet zeker dat er sprake zal zijn van een groot voordeel.<\/p>\n<p><b>AG:<\/b> \u2013 Web Assembly wordt ook ontwikkeld door grote bedrijven.<\/p>\n<p><b>V:<\/b> \u2013 Tot nu toe lijkt het mij nog lastig om Web Assembly te beoordelen. Al jaren praten we erover, maar er zijn weinig echte prestaties die we kunnen aanraken.<\/p>\n<p><b>AG:<\/b> \u2013 Misschien. We zullen het zien.<\/p>\n<p><b>V:<\/b> \u2013 We hebben geen problemen aan de backend... Misschien moeten we deze problemen in de frontend laten? Waarom daarheen gaan?<\/p>\n<p><b>AG:<\/b> \u2013 We moeten een team van frontend-ontwikkelaars aanhouden.<\/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=\"Video afspelen\" 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>Een beetje reclame \ud83d\ude42<\/h3>\n<p>\nBedankt dat je bij ons blijft. Houd je van onze artikelen? Wil je meer interessante inhoud zien? Ondersteun ons door een bestelling te plaatsen of ons aan vrienden aan te bevelen, <noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/cloudvps\/nl\">cloud VPS voor ontwikkelaars vanaf $4,99<\/a><\/noindex>, <b>een unieke variant van entry-level servers, die we voor jou hebben bedacht:<\/b> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/347386\/\">De waarheid over VPS (KVM) E5-2697 v3 (6 Kernen) 10GB DDR4 480GB SSD 1Gbps vanaf $19 of hoe deel je een server correct?<\/a><\/noindex> (opties beschikbaar met RAID1 en RAID10, tot 24 cores en tot 40GB DDR4).<\/p>\n<p><b>Dell R730xd is 2 keer goedkoper in datacenter Equinix Tier IV in Amsterdam?<\/b> Alleen bij ons <b><noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/serversnl\">2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100TB vanaf $199<\/a><\/noindex> in Nederland! <b>Dell R420 \u2014 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB \u2014 vanaf $99!<\/b><\/b> Lees over hoe <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/329618\/\">je een infrastructuur van bedrijfsniveau kunt opbouwen met Dell R730xd E5-2650 v4 servers die wel \u20ac9000 kosten voor een prikkie?<\/a><\/noindex><br \/>\n<br \/>Bron: <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.3 - 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\/nl\/blog\/administrirovanie\/aleksej-grachyov-go-frontend\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"nl_NL\" \/>\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\/nl\/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 mei 2018: Host: \u2013 Iedereen.","canonical_url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/aleksej-grachyov-go-frontend","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nl_NL","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\/nl\/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\/nl\/wp-json\/wp\/v2\/posts\/71628","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/comments?post=71628"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/71628\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media\/71629"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=71628"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=71628"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=71628"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}