{"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\/it\/blog\/administrirovanie\/aleksej-grachyov-go-frontend","title":{"rendered":"Aleksej Gra\u010d\u00ebv: Go Frontend","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Kyiv Go Meetup Maggio 2018:<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010d\u00ebv: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/9974ab1db5347a41e4ec5110c3d2ef56.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>Moderatore:<\/b> \u2013 Ciao a tutti! Grazie per essere qui! Oggi abbiamo due relatori ufficiali \u2013 Lesha e Vanya. Ce ne saranno altri due, se abbiamo tempo. Il primo relatore \u00e8 Alexey Grachev, che ci parler\u00e0 di GopherJS.<\/p>\n<p><b>Alexey Grachev (di seguito \u2013 AG):<\/b> \u2013 Sono uno sviluppatore Go e scrivo servizi web in Go. A volte mi capita di dover affrontare il frontend, e talvolta devo metterci le mani. Voglio condividere la mia esperienza e le mie ricerche su Go nel frontend.<\/p>\n<p>La leggenda \u00e8 la seguente: prima parleremo del motivo per cui vogliamo eseguire Go nel frontend, poi discuteremo di come farlo. Ci sono due strade \u2013 Web Assembly e GopherJS. Vediamo in che stato sono queste soluzioni e cosa possiamo fare.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Cosa c'\u00e8 che non va con il frontend?<\/h3>\n<p>\nSiete tutti d'accordo che il frontend va bene?<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010d\u00ebv: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/065119e699053306072b1d7aa3183b34.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCi sono pochi test? Compilazione lenta? Ecosistema? Va bene.<\/p>\n<p>Per quanto riguarda il frontend, mi piace la citazione di uno degli sviluppatori frontend nel suo libro:<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010d\u00ebv: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/e69eba4fc073c0b59789859c94ba29f2.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIn Javascript non c'\u00e8 un sistema di tipi. Ora inizier\u00f2 a elencare i problemi che ho incontrato nel mio lavoro e a spiegare come vengono risolti.<\/p>\n<p>Definire un sistema di tipi in JavaScript \u00e8 piuttosto complicato: ci sono stringhe che rappresentano il tipo di oggetto, ma in realt\u00e0 non hanno molto a che fare con i tipi. Questo problema \u00e8 stato risolto in TypeScript (un'estensione di JavaScript) e Flow (un verificatore statico dei tipi in JavaScript). In effetti, il frontend ha trovato una soluzione al problema della scarsa gestione dei tipi in JavaScript.<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010d\u00ebv: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/257542cbfd2e316fbe0a0033056fff6f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNon esiste una vera e propria libreria standard nel browser: ci sono alcuni oggetti incorporati e funzioni \"magiche\" nei browser. Ma in JavaScript, la libreria standard non \u00e8 presente. Questo problema era gi\u00e0 stato affrontato da jQuery (tutti usavano jQuery con tutti i suoi prototipi, helper e funzioni necessarie per il funzionamento). Oggi tutti usano Lodash:<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010d\u00ebv: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/4eae8a8f19776028bd88fe8f7a751605.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCallback hell. Penso che tutti abbiano visto codice JavaScript circa 5 anni fa, ed era simile a un \"nido\" di callback estremamente complessi. Oggi questo problema \u00e8 stato risolto (con il rilascio di ES-15 o ES-16), sono stati introdotti in JavaScript i promise, e per un po' tutti hanno respirato pi\u00f9 facilmente.<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010d\u00ebv: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/96c574a880ad97e0802ae3006a60cee6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nFino a quando non \u00e8 arrivato Promice hell... Non so come faccia l'industria del frontend, ma si complicano la vita in modi strani. Sono riusciti a creare un \u00abhell\u00bb anche con i \u00abpromises\u00bb. Poi hanno deciso di risolvere il problema introducendo un nuovo primitivo: async\/await.<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010d\u00ebv: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/7c0679babbea4583de924292893d805c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCon l'asincronia, il problema \u00e8 risolto. Async\/await \u00e8 un primitivo abbastanza popolare in vari linguaggi. In Python e in altri c'\u00e8 questo approccio, ed \u00e8 piuttosto buono. Problema risolto.<\/p>\n<p>Quale problema non \u00e8 risolto? La complessit\u00e0 dei framework in crescita geometrica, la complessit\u00e0 dell'ecosistema e dei programmi stessi.<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010d\u00ebv: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/617fbc72e9e059bf608a48c84c5328f9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<ul>\n<li>La sintassi di Javascript \u00e8 un po' strana. Tutti noi conosciamo i problemi legati alla somma di array e oggetti e altre peculiarit\u00e0.<\/li>\n<li>Javascript \u00e8 multi-paradigma. Ora \u00e8 un sistema particolarmente necessario, dato che l'ecosistema \u00e8 molto ampio:\n<ul>\n<li>tutti scrivono in stili diversi \u2013 c'\u00e8 chi scrive in modo strutturato, chi in modo funzionale, diversi sviluppatori seguono approcci diversi;<\/li>\n<li>da diversi pacchetti (packages) provengono paradigmi diversi quando si utilizzano pacchetti differenti.<\/li>\n<li>c'\u00e8 molto \"divertimento\" con la programmazione funzionale in JavaScript \u2013 \u00e8 nata la libreria rambda e ora nessuno pu\u00f2 leggere i programmi scritti in essa.<\/li>\n<\/ul>\n<p>\n<\/li>\n<li>Tutto ci\u00f2 porta a un grande impatto nell'ecosistema, che \u00e8 cresciuto in modo incredibile. I pacchetti non sono compatibili: alcuni usano le promise, altri async\/await, altri ancora i callback. Inoltre, sono scritti in paradigmi diversi!<\/li>\n<li>Questo rende difficile mantenere il progetto. \u00c8 complicato trovare un bug se non riesci a leggere il codice.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Che cos'\u00e8 il Web Assembly?<\/h3>\n<p>\nI ragazzi della Mozilla Foundation e di altre aziende hanno ideato qualcosa di chiamato Web Assembly. Che cos'\u00e8?<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010d\u00ebv: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/9ca5b1e0b7646ec7d6fa751d77780b41.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<ul>\n<li>\u00c8 una macchina virtuale integrata nel browser che supporta un formato binario.<\/li>\n<li>I programmi binari vengono eseguiti praticamente in modo nativo, quindi il browser non deve analizzare ogni volta tutta la \"grammatica\" del codice JavaScript.<\/li>\n<li>Tutti i browser hanno dichiarato il loro supporto.<\/li>\n<li>Poich\u00e9 \u00e8 bytecode, \u00e8 possibile scrivere un compilatore per qualsiasi linguaggio.<\/li>\n<li>I quattro principali browser sono gi\u00e0 dotati di supporto per il Web Assembly.<\/li>\n<li>Presto stiamo aspettando il supporto nativo in Go. Questa nuova architettura \u00e8 gi\u00e0 stata aggiunta: GOARCH=wasm GOOS=js (presto). Per ora, a quanto ne so, non \u00e8 funzionante, ma c'\u00e8 una dichiarazione che conferma che questo arriver\u00e0 sicuramente in Go.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Cosa fare adesso? GopherJS<\/h3>\n<p>\nFinch\u00e9 non abbiamo il supporto per Web Assembly, esiste un transpiler chiamato GopherJS.<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010d\u00ebv: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/067c1b605b220c4aeed103915daacca4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<ul>\n<li>Il codice scritto in Go viene transpile in JavaScript \"pulito\".<\/li>\n<li>Funziona in tutti i browser \u2013 non ci sono nuove funzionalit\u00e0 supportate solo dai browser moderni (\u00e8 Vanilla JS, che funziona su qualsiasi piattaforma).<\/li>\n<li>C'\u00e8 supporto per quasi tutto ci\u00f2 che \u00e8 presente in Go, incluse le goroutine e i canali... \u2013 tutto ci\u00f2 che conosciamo e amiamo.<\/li>\n<li>Quasi tutta la libreria standard \u00e8 supportata, tranne per i pacchetti che non ha senso supportare nel browser: syscall, interazioni di rete (c'\u00e8 un client net\/http, ma non un server, e il client viene emulato tramite XMLHttpRequest). Nel complesso, l'intera libreria standard \u00e8 disponibile \u2013 eccola nel browser, questa \u00e8 la stdlib Go che amiamo.<\/li>\n<li>L'intero ecosistema dei pacchetti in Go, tutte le soluzioni di terze parti (template e altro), possono essere compilati con GopherJS e eseguiti nel browser.<\/li>\n<\/ul>\n<p>\nOttenere GopherJS \u00e8 molto semplice: si tratta di un pacchetto Go standard. Facciamo go get e avremo il comando GopherJS per costruire l'applicazione:<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010d\u00ebv: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/4f96f9e437b532f9cb1a4f960a621293.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEcco un piccolo hello world...<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010d\u00ebv: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/e4b56385a6cac97fc75b09584da1bfbb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n...Un normale programma Go, il pacchetto fmt della libreria standard e Binding Js per accedere all'API del browser. Println alla fine verr\u00e0 convertito in console log e il browser scriver\u00e0 \u201cHello gophers\u201d! \u00c8 cos\u00ec semplice: facciamo GopherJS build \u2013 lo avviamo nel browser \u2013 e tutto funziona!<\/p>\n<h3>Cosa c'\u00e8 attualmente?<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Aleksej Gra\u010d\u00ebv: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/6adbc1f604580c3878775c45174444a2.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCi sono binding per tutti i principali framework js:<\/p>\n<ul>\n<li>JQuery;<\/li>\n<li>Angular.js;<\/li>\n<li>D3.js per la creazione di grafici e lavoro con grandi dati;<\/li>\n<li>React.js;<\/li>\n<li>VueJS;<\/li>\n<li>c'\u00e8 anche supporto per Electron (quindi gi\u00e0 ora possiamo scrivere applicazioni desktop su \u2018Electron\u2019);<\/li>\n<li>e la cosa pi\u00f9 divertente \u00e8 WebGL (possiamo creare applicazioni poligonali, inclusi giochi con grafica 3D, musica e tutti i fronzoli);<\/li>\n<li>e molti altri binding per tutti i principali framework e librerie javascript.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Framework<\/h3>\n<p><\/p>\n<ol>\n<li>Esiste gi\u00e0 un framework web sviluppato appositamente per GopherJS \u2013 Vecty. \u00c8 un'alternativa completa a React.js, ma sviluppato in Go, con le peculiarit\u00e0 di GopherJS.<\/li>\n<li>Ci sono anche motori di gioco (inaspettatamente!). Ne ho trovati due tra i pi\u00f9 popolari:\n<ul>\n<li>Engo;<\/li>\n<li>Ebiten.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>\nMostrer\u00f2 un paio di esempi di come appare e cosa si pu\u00f2 gi\u00e0 scrivere in Go:<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010d\u00ebv: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/53365146c12b320fbf05334bdc6a79e5.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOppure questa variante (non ho trovato un FPS 3D, ma forse esiste):<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010d\u00ebv: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/b1c0a9d6d91ad8a10a9b784cd8c7b1d0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Cosa propongo?<\/h3>\n<p>\nAttualmente l'industria del front-end \u00e8 in uno stato tale che tutti i linguaggi che prima si lamentavano di JavaScript stanno per affluire. Ora tutti saranno compilati in \"Web Assembly\". Cosa ci serve per avere un posto di rilievo l\u00ec come programmatori Go?<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010d\u00ebv: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/32c4a03f7a31def833942af6e59c70cb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTradizionalmente, Go \u00e8 considerato un linguaggio di programmazione di sistema e praticamente non ci sono librerie per lavorare con l'interfaccia utente. Esiste qualcosa, ma \u00e8 per met\u00e0 abbandonato e per met\u00e0 non funzionale.<\/p>\n<p>Ecco, c'\u00e8 una buona opportunit\u00e0 per creare librerie UI in Go che funzioneranno su GopherJS! Finalmente si pu\u00f2 scrivere il proprio framework! \u00c8 arrivato il momento in cui puoi creare un framework, e sar\u00e0 tra i primi a essere adottato e diventerai una star (se sar\u00e0 un buon framework).<\/p>\n<p>\u00c8 possibile adattare un sacco di diversi pacchetti gi\u00e0 presenti nell'ecosistema Go alle specifiche del browser (ad esempio, un motore di template). Funzionano gi\u00e0, e si possono creare dettagli pratici per rendere facile il rendering dei contenuti direttamente nel browser. Inoltre, si pu\u00f2 realizzare un servizio in grado di fare lo stesso sul server e sul frontend, utilizzando lo stesso codice \u2014 proprio come piace ai frontend developer (solo che ora \u00e8 fatto in Go).<\/p>\n<p>Si pu\u00f2 creare un gioco! Just for fun\u2026<\/p>\n<p>Ho finito.<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010d\u00ebv: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/ba08e0e65de0898e4f53abd00abb6dab.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Domande<\/h3>\n<p>\n<b>Domanda (di seguito \u2013 D):<\/b> \u2013 Scrivo in Go o in Js?<\/p>\n<p><b>AG:<\/b> \u2013 Scrivi in Go, routine, canali, strutture, embedding \u2013 \u00e8 tutto... Ti iscrivi a un evento e ci passi una funzione.<\/p>\n<p><b>D:<\/b> \u2013 Quindi scrivo in 'puro' Js?<\/p>\n<p><b>AG:<\/b> \u2013 No, scrivi come se fosse Go e ti connetti all'API del browser (l'API non \u00e8 cambiata). Puoi scrivere i tuoi ganci per ricevere messaggi nel canale \u2013 non \u00e8 difficile.<\/p>\n<p><b>D:<\/b> \u2013 E per il mobile?<\/p>\n<p><b>AG:<\/b> \u2013 Ho visto: ci sono binding per il pacchetto Cordova che Js avvia. In React Native \u2013 non lo so; magari ci sono, oppure no (non mi sono interessato molto). Il motore di gioco N-go supporta anche le applicazioni mobili \u2013 sia iOS che Android.<\/p>\n<p><b>D:<\/b> \u2013 Domanda su Web Assembly. Gli spazi stanno diventando sempre pi\u00f9 affollati, nonostante la compressione e la \"zippatura\"... Non rischiamo di danneggiare ulteriormente il mondo del frontend in questo modo?<\/p>\n<p><b>AG:<\/b> \u2013 Web Assembly \u00e8 un formato binario, e un binario per impostazione predefinita non pu\u00f2 essere maggiore nel rilascio finale rispetto al testo... Sei attratto dal runtime, ma \u00e8 lo stesso di tirare dentro una libreria standard di Javascript, quando non c'\u00e8, quindi utilizziamo qualcosa come Lodash. Non so quanto spazio occupi Lodash.<\/p>\n<p><b>D:<\/b> \u2013 Sicuramente meno del runtime...<\/p>\n<p><b>AG:<\/b> \u2013 In Javascript \"puro\"?<\/p>\n<p><b>D:<\/b> \u2013 S\u00ec. Lo comprimiamo prima di inviarlo...<\/p>\n<p><b>AG:<\/b> \u2013 Ma questo \u00e8 testo... In generale, un megabyte sembra tanto, ma \u00e8 tutto (hai tutto il runtime). Poi scrivi la tua logica di business, che aumenter\u00e0 il tuo binario dell'1%. Finora non vedo come questo possa compromettere il frontend. Inoltre, Web Assembly funzioner\u00e0 pi\u00f9 velocemente di Javascript per un motivo ovvio: non deve essere analizzato.<\/p>\n<p><b>D:<\/b> \u2013 Questo \u00e8 un punto ancora controverso... Non c'\u00e8 ancora una realizzazione standard di \"Wasm\" (Web Assembly) per poter giudicare chiaramente. Concettualmente - s\u00ec: tutti capiamo che un binario dovrebbe essere pi\u00f9 veloce, ma l'attuale realizzazione di V8 \u00e8 molto efficace.<\/p>\n<p><b>AG:<\/b> \u2013 S\u00ec.<\/p>\n<p><b>D:<\/b> \u2013 La compilazione qui funziona davvero molto bene e non \u00e8 affatto scontato che ci sar\u00e0 un grande vantaggio.<\/p>\n<p><b>AG:<\/b> \u2013 Anche i grandi nomi stanno utilizzando Web Assembly.<\/p>\n<p><b>D:<\/b> \u2013 Al momento, mi sembra ancora difficile giudicare Web Assembly. Ci sono anni di discussioni, ma poche realizzazioni tangibili.<\/p>\n<p><b>AG:<\/b> \u2013 Forse. Vedremo.<\/p>\n<p><b>D:<\/b> \u2013 Non abbiamo problemi sul backend\u2026 Magari \u00e8 meglio lasciare questi problemi sul frontend? Perch\u00e9 intromettersi?<\/p>\n<p><b>AG:<\/b> \u2013 Dobbiamo mantenere un team di frontend.<\/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=\"Riproduci video\" 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 po' di pubblicit\u00e0 \ud83d\ude42<\/h3>\n<p>\nGrazie per essere con noi. Ti piacciono i nostri articoli? Vuoi vedere pi\u00f9 contenuti interessanti? Supportaci effettuando un ordine o raccomandandoci ai tuoi conoscenti, <noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/cloudvps\/nl\">VPS cloud per sviluppatori a partire da $4,99<\/a><\/noindex>, <b>un'alternativa unica ai server entry-level, che abbiamo creato per te:<\/b> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/347386\/\">Tutta la verit\u00e0 su VPS (KVM) E5-2697 v3 (6 Core) 10GB DDR4 480GB SSD 1Gbps a partire da $19. Come dividere il server correttamente?<\/a><\/noindex> (disponibili opzioni con RAID1 e RAID10, fino a 24 core e fino a 40GB DDR4).<\/p>\n<p><b>Dell R730xd a met\u00e0 prezzo nel data center Equinix Tier IV ad Amsterdam?<\/b> Solo da noi <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 100 TB a partire da $199<\/a><\/noindex> nei Paesi Bassi! <b>Dell R420 \u2014 2x E5-2430 2.2GHz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB \u2014 a partire da $99!<\/b><\/b> Scopri di pi\u00f9 su <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/329618\/\">Come costruire un'infrastruttura di classe enterprise con server Dell R730xd E5-2650 v4 dal costo di 9000 euro a prezzi stracciati?<\/a><\/noindex><br \/>\n<br \/>Fonte: <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.0.1 - 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\/it\/blog\/administrirovanie\/aleksej-grachyov-go-frontend\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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\/it\/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\udd47 Alexey Grachev: Go Frontend | ProHoster","description":"Kyiv Go Meetup Maggio 2018: Moderatore: \u2013 A tutti.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/aleksej-grachyov-go-frontend","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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\/it\/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\/it\/wp-json\/wp\/v2\/posts\/71628","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=71628"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/71628\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/71629"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=71628"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=71628"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=71628"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}