{"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\/da\/blog\/administrirovanie\/aleksej-grachyov-go-frontend","title":{"rendered":"Aleksej Gra\u010djov: Go Frontend","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Kyiv Go Meetup Maj 2018:<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010djov: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/9974ab1db5347a41e4ec5110c3d2ef56.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>V\u00e6rt:<\/b> \u2013 Hej alle sammen! Tak fordi I er her i dag! Vi har to officielle talere \u2013 Lj\u00f8sha og Vania. Der kommer ogs\u00e5 to til, hvis vi har tid. F\u00f8rste taler \u2013 Alexey Grachev, han vil fort\u00e6lle os om GopherJS.<\/p>\n<p><b>Alexey Grachev (herefter \u2013 AG):<\/b> \u2013 Jeg er Go-udvikler, og jeg skriver webtjenester i Go. Nogle gange skal jeg indblande mig i frontend, og nogle gange m\u00e5 jeg selv kaste mig ind i det. Jeg vil dele mine erfaringer og research om Go i frontend.<\/p>\n<p>Legenden er s\u00e5dan: F\u00f8rst taler vi om, hvorfor vi \u00f8nsker at k\u00f8re Go i frontend, derefter diskuterer vi, hvordan det kan g\u00f8res. Der er to metoder \u2013 Web Assembly og GopherJS. Lad os se, hvor disse l\u00f8sninger st\u00e5r, og hvad der kan g\u00f8res.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Hvad er galt med frontend?<\/h3>\n<p>\nEr alle enige om, at alt er godt med frontend?<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010djov: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/065119e699053306072b1d7aa3183b34.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEr der f\u00e5 tests? Langsom samling? \u00d8kosystem? Godt.<\/p>\n<p>Jeg kan godt lide en udtalelse fra en af frontend-udviklerne i hans bog:<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010djov: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/e69eba4fc073c0b59789859c94ba29f2.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nI Javascript er der ikke noget typesystem. Nu vil jeg n\u00e6vne problemer, jeg har m\u00f8dt undervejs, og forklare, hvordan de h\u00e5ndteres.<\/p>\n<p>Man kan overhovedet ikke kalde typesystemet i Javasript for et typesystem \u2013 der er strenge, der repr\u00e6senterer objekttypen, men de har faktisk ikke noget at g\u00f8re med typer. Dette problem er l\u00f8st i TypeScript (et lag oven p\u00e5 Javasript) og Flow (en statisk typechecker for Javascript). Grundl\u00e6ggende er frontend allerede n\u00e5et til en l\u00f8sning p\u00e5 problemet med det d\u00e5rlige typesystem i Javascript.<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010djov: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/257542cbfd2e316fbe0a0033056fff6f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDer findes ikke en standardbibliotek i browseren som s\u00e5dan \u2013 der er nogle indbyggede objekter og 'magiske' funktioner i browsere. Men jeg mener, at der ikke findes en standardbibliotek i Javascript. Dette problem blev engang l\u00f8st af jQuery (alle brugte jQuery med alle prototyper, hj\u00e6lpere, funktioner der var n\u00f8dvendige for arbejdet). I dag bruger alle Lodash:<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010djov: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/4eae8a8f19776028bd88fe8f7a751605.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCallback hell. Jeg tror, alle har set Javascript kode for omkring 5 \u00e5r siden, og det lignede en 'nudel' af et utroligt indviklet netv\u00e6rk af callbacks. Denne problematik er nu l\u00f8st (med introduktionen af ES-15 eller ES-16), da man tilf\u00f8jede promises til Javascript, og alle fik lettere ved lige i et stykke tid.<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010djov: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/96c574a880ad97e0802ae3006a60cee6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIndtil Promice hell kom... Jeg ved ikke, hvordan frontend-industrien form\u00e5r det, men de graver hele tiden sig selv ned i underlige afkroge. De fik ogs\u00e5 skabt hell med 'promises'. S\u00e5 l\u00f8ste de dette problem ved at introducere et nyt primitiv \u2013 async\/await:<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010djov: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/7c0679babbea4583de924292893d805c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMed asynkronitet er problemet l\u00f8st. Async\/await er en ret popul\u00e6r konstruktion i forskellige sprog. I Python og andre sprog findes denne tilgang \u2013 den er rimeligt god. Problemet er l\u00f8st.<\/p>\n<p>Hvilket problem er ikke l\u00f8st? Den geometrisk stigende kompleksitet af rammerne, kompleksiteten af \u00f8kosystemet og selve programmerne.<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010djov: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/617fbc72e9e059bf608a48c84c5328f9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<ul>\n<li>JavaScripts syntaks er lidt underlig. Vi kender alle problemerne med at addere arrays og objekter og andre m\u00e6rkv\u00e6rdigheder.<\/li>\n<li>JavaScript er multiparadigme. Dette er is\u00e6r aktuelt nu, hvor \u00f8kosystemet er meget stort:\n<ul>\n<li>alle skriver i forskellige stilarter \u2013 nogle skriver struktureret, andre skriver funktionelt, forskellige udviklere skriver p\u00e5 forskellige m\u00e5der;<\/li>\n<li>fra forskellige pakker (packages) kommer der forskellige paradigmer, n\u00e5r du bruger forskellige pakker;<\/li>\n<li>der er meget 'sjov' med funktionel programmering i JavaScript \u2013 biblioteket Rambda er dukket op, og nu kan ingen l\u00e6se programmer skrevet i dette bibliotek.<\/li>\n<\/ul>\n<p>\n<\/li>\n<li>Dette bidrager til en stor impact i \u00f8kosystemet, og det er vokset utrolig meget. Pakker er inkompatible med hinanden: nogle er baseret p\u00e5 promises, nogle p\u00e5 async\/await, nogle p\u00e5 callbacks. Der skrives ogs\u00e5 i forskellige paradigmer!<\/li>\n<li>Dette f\u00f8rer til, at det er sv\u00e6rt at vedligeholde projekter. Det er sv\u00e6rt at finde bugs, hvis du ikke kan l\u00e6se koden.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Hvad er Web Assembly?<\/h3>\n<p>\nDe dygtige folk fra Mozilla Foundation og flere andre virksomheder har opfundet noget, der hedder Web Assembly. Hvad er det?<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010djov: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/9ca5b1e0b7646ec7d6fa751d77780b41.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<ul>\n<li>Det er en indbygget virtuel maskine i browseren, der underst\u00f8tter et bin\u00e6rt format.<\/li>\n<li>Binarprogrammer bliver sendt derhen og k\u00f8rer n\u00e6sten nativt, hvilket betyder, at browseren ikke beh\u00f8ver at parse al 'spaghetti' JavaScript-kode hver gang.<\/li>\n<li>Alle browsere har erkl\u00e6ret st\u00f8tte.<\/li>\n<li>Da dette er bytekode, kan der skrives en compiler til ethvert sprog.<\/li>\n<li>De fire hovedbrowserne leveres allerede med st\u00f8tte til Web Assembly.<\/li>\n<li>Snart forventer vi nativer st\u00f8tte i Go. Denne nye arkitektur er allerede tilf\u00f8jet: GOARCH=wasm GOOS=js (snart). Indtil videre, som jeg forst\u00e5r det, er den ikke funktionel, men der er en erkl\u00e6ring om, at dette helt sikkert vil komme i Go.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Hvad skal vi g\u00f8re nu? GopherJS<\/h3>\n<p>\nIndtil vi f\u00e5r st\u00f8tte for Web Assembly, er der en transpiler ved navn GopherJS.<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010djov: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/067c1b605b220c4aeed103915daacca4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<ul>\n<li>Koden i Go bliver transpilet til 'ren' JavaScript.<\/li>\n<li>Det k\u00f8rer i alle browsere \u2013 der er ingen nye funktioner, som kun st\u00f8ttes af moderne browsere (det er Vanilla JS, der k\u00f8rer p\u00e5 alt, hvad som helst).<\/li>\n<li>Der er st\u00f8tte for n\u00e6sten alt, hvad der findes i Go, inklusive gorutiner og kanaler... - alt det, vi elsker og kender.<\/li>\n<li>N\u00e6sten hele standardbiblioteket underst\u00f8ttes, med undtagelse af de pakker, der ikke giver mening at underst\u00f8tte i en browser: syscall, net-interaktioner (der er en net\/http-klient, men ikke nogen server, og klienten emuleres via XMLHttpRequest). Generelt er hele standardbiblioteket tilg\u00e6ngeligt - her er det i browseren, her er stdlib Go, som vi elsker.<\/li>\n<li>Hele Go-pakke\u00f8kosystemet, alle tredjepartsl\u00f8sninger (templating osv.) kan kompileres med GopherJS og k\u00f8res i browseren.<\/li>\n<\/ul>\n<p>\nDet er meget nemt at f\u00e5 GopherJS - det er en almindelig Go-pakke. Vi laver go get, og s\u00e5 har vi GopherJS-kommandoen til at bygge applikationen:<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010djov: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/4f96f9e437b532f9cb1a4f960a621293.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHer er et lille hello world...<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010djov: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/e4b56385a6cac97fc75b09584da1bfbb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n...En almindelig Go-applikation, det almindelige fmt-pakke fra standardbiblioteket og Binding Js til at tilg\u00e5 browserens API. Println vil i sidste ende blive omdannet til et console log, og browseren vil skrive \"Hello gophers\"! S\u00e5 nemt: vi laver GopherJS build - k\u00f8rer i browseren - alt fungerer!<\/p>\n<h3>Hvad er der lige nu? Bindings<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Aleksej Gra\u010djov: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/6adbc1f604580c3878775c45174444a2.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDer er bindings til alle popul\u00e6re JS-rammev\u00e6rk:<\/p>\n<ul>\n<li>JQuery;<\/li>\n<li>Angular.js;<\/li>\n<li>D3.js til graftegning og arbejdet med store data;<\/li>\n<li>React.js;<\/li>\n<li>VueJS;<\/li>\n<li>der er endda st\u00f8tte for Electron (det vil sige, at vi allerede nu kan skrive desktopapplikationer med \"Electron\");<\/li>\n<li>og det mest interessante - det er WebGL (vi kan lave holografiske applikationer, inklusive spil med 3D-grafik, musik og alle funktioner);<\/li>\n<li>og rigtig mange andre bindings til alle popul\u00e6re JavaScript-rammev\u00e6rk og biblioteker.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Framework<\/h3>\n<p><\/p>\n<ol>\n<li>Der findes allerede en web-ramme specifikt udviklet til GopherJS - Vecty. Det er en fuldgyldig pendant til React.js, men kun udviklet i Go, med specifikationen for GopherJS.<\/li>\n<li>Der findes endda spilmotorer (overraskende!). Jeg fandt to af de mest popul\u00e6re:\n<ul>\n<li>Engo;<\/li>\n<li>Ebiten.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>\nJeg vil vise et par eksempler p\u00e5, hvordan det ser ud, og hvad der allerede nu kan skrives i Go:<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010djov: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/53365146c12b320fbf05334bdc6a79e5.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEller en s\u00e5dan version (jeg fandt ikke en 3D-skyder, men m\u00e5ske findes den):<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010djov: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/b1c0a9d6d91ad8a10a9b784cd8c7b1d0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Hvad foresl\u00e5r jeg?<\/h3>\n<p>\nLige nu er frontend-industrien i en s\u00e5dan tilstand, at alle sprog, der tidligere har ledet under Javascript, nu vil styrte ind. Nu vil alle blive kompileret til \"WebAssembly\". Hvad har vi brug for for at f\u00e5 en v\u00e6rdig plads som \"gophers\" der?<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010djov: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/32c4a03f7a31def833942af6e59c70cb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nI Go er det traditionelt set, at det er et systemprogrammeringssprog, og der er n\u00e6sten ingen biblioteker til UI-arbejde. Der findes noget, men det er halvmorsket og halvdelen ikke-funktionelt.<\/p>\n<p>Og nu har vi et godt tidspunkt til at lave UI-biblioteker i Go, som kan k\u00f8re p\u00e5 GopherJS! Endelig kan vi skrive vores eget framework! Tiden er inde til at skrive et framework, og det vil v\u00e6re et af de f\u00f8rste og f\u00e5 tidlig tilpasning, og du vil v\u00e6re en stjerne (hvis det er et godt framework).<\/p>\n<p>Det er muligt at tilpasse en lang r\u00e6kke forskellige pakker, der allerede findes i Go-\u00f8kosystemet, til specifikationen i browseren (for eksempel skabelonmotor). De kommer til at fungere, vi kan lave praktiske indpakninger, s\u00e5 indhold nemt kan gengives direkte i browseren. Plus, vi kan lave en tjeneste, der kan gengive det samme p\u00e5 serveren og frontend'en ved at bruge den samme kode \u2013 pr\u00e6cis som frontend-udviklere \u00f8nsker det (men nu i Go).<\/p>\n<p>Vi kan skrive et spil! Just for fun\u2026<\/p>\n<p>Det var det for mig.<\/p>\n<p><img decoding=\"async\" alt=\"Aleksej Gra\u010djov: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/ba08e0e65de0898e4f53abd00abb6dab.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Sp\u00f8rgsm\u00e5l<\/h3>\n<p>\n<b>Sp\u00f8rgsm\u00e5l (herefter \u2013 S):<\/b> \u2013 Skriver jeg i Go eller Js?<\/p>\n<p><b>AG:<\/b> \u2013 Du skriver Go-rutiner, kanaler, strukturer, embedding \u2013 alt sammen\u2026 Du tilmelder dig en begivenhed og sender en funktion dertil.<\/p>\n<p><b>Q:<\/b> \u2013 S\u00e5 jeg skriver i \u00bbren\u00ab Js?<\/p>\n<p><b>AG:<\/b> \u2013 Nej, du skriver ligesom i Go og tilslutter dig til browserens API (API'en er forblevet u\u00e6ndret). Du kan skrive dine egne indpakninger, s\u00e5 beskeder kommer ind i kanalen \u2013 det er ikke sv\u00e6rt.<\/p>\n<p><b>Q:<\/b> \u2013 Hvad med mobil?<\/p>\n<p><b>AG:<\/b> \u2013 Jeg har helt sikkert set: der er bindinger til Cordova-patch, som Js k\u00f8rer. I React Native \u2013 ved jeg ikke; m\u00e5ske er der, m\u00e5ske ikke (jeg har ikke interesseret mig s\u00e5 meget). Spilmotoren N-go underst\u00f8tter ogs\u00e5 mobilapplikationer \u2013 b\u00e5de iOs og Android.<\/p>\n<p><b>Q:<\/b> \u2013 Sp\u00f8rgsm\u00e5l om Web Assembly. Pladsen bliver mere og mere, p\u00e5 trods af komprimering og \u00bbzip\u00ab... Vil vi ikke dr\u00e6be frontend-verdenen endnu mere p\u00e5 denne m\u00e5de?<\/p>\n<p><b>AG:<\/b> \u2013 Web Assembly er et bin\u00e6rt format, og som standard kan bin\u00e6rt ikke v\u00e6re st\u00f8rre end tekst i den endelige udgivelse... Du har brug for runtime, men det er det samme som at tr\u00e6kke den standardbibliotek Javascript ind, n\u00e5r den ikke er der, derfor bruger vi noget som Lodash. Jeg ved ikke, hvor meget Lodash fylder.<\/p>\n<p><b>Q:<\/b> \u2013 Tydeligt mindre end runtime\u2026<\/p>\n<p><b>AG:<\/b> \u2013 I \u00abrent\u00bb Javascript?<\/p>\n<p><b>Q:<\/b> \u2013 Ja. Vi komprimerer det jo, inden vi sender det\u2026<\/p>\n<p><b>AG:<\/b> \u2013 Men det er jo tekst\u2026 Generelt set er en megabyte ret meget, men det er \u2013 alt sammen (du har hele runtime). Derefter skriver du din forretningslogik, som vil \u00f8ge din binary med 1 %. Indtil videre kan jeg ikke se, at det p\u00e5virker frontend. Desuden vil Web Assembly k\u00f8re hurtigere end Javascript af \u00e5benlyse grunde \u2013 det skal ikke parses.<\/p>\n<p><b>Q:<\/b> \u2013 Det er stadig et diskussionsemne\u2026 Der er endnu ikke nogen standardimplementering af \"Vasm\" (Web Assembly), som g\u00f8r det muligt at bed\u00f8mme entydigt. Konceptuelt \u2013 ja: vi forst\u00e5r alle, at binary skal v\u00e6re hurtigere, men den nuv\u00e6rende implementering af V8 er meget effektiv.<\/p>\n<p><b>AG:<\/b> \u2013 Ja.<\/p>\n<p><b>Q:<\/b> \u2013 Kompileringen fungerer virkelig meget godt, og der er ikke nogen garanti for, at der vil v\u00e6re en stor fordel.<\/p>\n<p><b>AG:<\/b> \u2013 Store drenge arbejder ogs\u00e5 med Web Assembly.<\/p>\n<p><b>Q:<\/b> \u2013 Jeg synes, det er sv\u00e6rt at d\u00f8mme om Web Assembly endnu. Der har v\u00e6ret snak om det i flere \u00e5r, men der er ikke mange reelle resultater, der kan m\u00e6rkes.<\/p>\n<p><b>AG:<\/b> \u2013 M\u00e5ske. Vi m\u00e5 se.<\/p>\n<p><b>Q:<\/b> \u2013 Vi har ingen problemer p\u00e5 backend\u2026 Skal vi ikke lade disse problemer ligge i frontend? Hvorfor skal vi blande os?<\/p>\n<p><b>AG:<\/b> \u2013 Vi er n\u00f8dt til at holde et hold af frontend-udviklere.<\/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=\"Afspil 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>Lidt reklame \ud83d\ude42<\/h3>\n<p>\nTak fordi du bliver hos os. Kan du lide vores artikler? \u00d8nsker du at se flere interessante materialer? St\u00f8t os ved at bestille eller anbefale os til dine bekendte, <noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/cloudvps\/nl\">cloud VPS til udviklere fra 4,99 $<\/a><\/noindex>, <b>en unik analog til entry-level servere, som vi har designet til dig:<\/b> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/347386\/\">Alt om VPS (KVM) E5-2697 v3 (6 kerner) 10 GB DDR4 480 GB SSD 1 Gbps fra 19 $ eller hvordan man deler serveren korrekt?<\/a><\/noindex> (tilg\u00e6ngelige muligheder med RAID1 og RAID10, op til 24 kerner og op til 40 GB DDR4).<\/p>\n<p><b>Dell R730xd til halv pris i datacenteret Equinix Tier IV i Amsterdam?<\/b> Kun hos os <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 fra 199 $<\/a><\/noindex> i Holland! <b>Dell R420 - 2x E5-2430 2.2GHz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - fra 99 $!<\/b><\/b> L\u00e6s om hvordan <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/329618\/\">man bygger enterprise-infrastruktur ved hj\u00e6lp af Dell R730xd E5-2650 v4 servere til 9000 euro for en br\u00f8kdel af prisen?<\/a><\/noindex><br \/>\n<br \/>Kilde: <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\/da\/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=\"da_DK\" \/>\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\/da\/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\udd47Aleksej Grajtjov: Go Frontend | ProHoster","description":"Kyiv Go Meetup maj 2018: V\u00e6rt: \u2013 Hej alle.","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/aleksej-grachyov-go-frontend","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/71628","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=71628"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/71628\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/71629"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=71628"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=71628"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=71628"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}