{"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\/sv\/blog\/administrirovanie\/aleksej-grachyov-go-frontend","title":{"rendered":"Alexey Grachev: Go Frontend","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Kyiv Go Meetup maj 2018:<\/p>\n<p><img decoding=\"async\" alt=\"Alexey Grachev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/9974ab1db5347a41e4ec5110c3d2ef56.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>Presentat\u00f6r:<\/b> \u2013 Hej alla! Tack f\u00f6r att ni \u00e4r h\u00e4r! Idag har vi tv\u00e5 officiella talare \u2013 Lyosha och Vanya. Det kommer att bli tv\u00e5 till om vi har tid. F\u00f6rsta talaren \u00e4r Alexey Grachev, som kommer att ber\u00e4tta om GopherJS.<\/p>\n<p><b>Alexey Grachev (h\u00e4danefter \u2013 AG):<\/b> \u2013 Jag \u00e4r Go-utvecklare och jag skriver webbservrar i Go. Ibland m\u00e5ste jag handskas med frontend, ibland g\u00e5r jag in d\u00e4r med h\u00e4nderna. Jag vill ber\u00e4tta om mina erfarenheter och forskningar kring Go p\u00e5 frontend.<\/p>\n<p>Legenden s\u00e4ger: f\u00f6rst ska vi prata om varf\u00f6r vi vill k\u00f6ra Go p\u00e5 frontend, sedan ska vi prata om hur vi kan g\u00f6ra det. Det finns tv\u00e5 s\u00e4tt \u2013 WebAssembly och GopherJS. L\u00e5t oss se i vilket skick dessa l\u00f6sningar \u00e4r och vad som kan g\u00f6ras.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Vad \u00e4r fel med frontend?<\/h3>\n<p>\n\u00c4r alla \u00f6verens om att allt \u00e4r bra med frontend?<\/p>\n<p><img decoding=\"async\" alt=\"Alexey Grachev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/065119e699053306072b1d7aa3183b34.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nF\u00f6r f\u00e5 tester? L\u00e5ngsam byggprocess? Ekosystem? Bra.<\/p>\n<p>N\u00e4r det g\u00e4ller frontend gillar jag ett citat fr\u00e5n en av frontend-utvecklarna i hans bok:<\/p>\n<p><img decoding=\"async\" alt=\"Alexey Grachev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/e69eba4fc073c0b59789859c94ba29f2.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nI Javascript finns det inget typ-system. Nu kommer jag att n\u00e4mna problem som jag har st\u00f6tt p\u00e5 under mitt arbete och f\u00f6rklara hur de l\u00f6ses.<\/p>\n<p>Ett typ-system \u00e4r egentligen sv\u00e5rt att kalla ett typ-system i Javascript \u2013 det finns str\u00e4ngar som representerar objekttypen, men det har egentligen ingenting med typer att g\u00f6ra. Detta problem har l\u00f6sts i TypeScript (en \u00f6verbyggnad ovanp\u00e5 Javascript) och Flow (en statisk typkontroll f\u00f6r Javascript). Faktum \u00e4r att frontend redan har n\u00e5tt en l\u00f6sning p\u00e5 problemet med det d\u00e5liga typ-systemet i Javascript.<\/p>\n<p><img decoding=\"async\" alt=\"Alexey Grachev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/257542cbfd2e316fbe0a0033056fff6f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDet finns ingen standardbibliotek i webbl\u00e4saren som s\u00e5dan \u2013 det finns n\u00e5gra inbyggda objekt och \"magiska\" funktioner i webbl\u00e4sare. Men jag skulle s\u00e4ga att det standardbiblioteket i Javascript faktiskt saknas. Detta problem l\u00f6stes f\u00f6r l\u00e4nge sedan av jQuery (alla anv\u00e4nde jQuery med alla prototyper, hj\u00e4lpare och funktioner som \u00e4r n\u00f6dv\u00e4ndiga f\u00f6r arbete). Nu anv\u00e4nder alla Lodash:<\/p>\n<p><img decoding=\"async\" alt=\"Alexey Grachev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/4eae8a8f19776028bd88fe8f7a751605.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCallback-h\u00e4xan. Jag tror att alla har sett Javascript-kod f\u00f6r ungef\u00e4r 5 \u00e5r sedan och att den liknade en \"nudel\" av otroliga sammanfl\u00e4tningar av callbacks. Nu har detta problem l\u00f6sts (med utgivningen av ES-15 eller ES-16), man har lagt till promises till Javascript och alla kan andas lite l\u00e4ttare f\u00f6r en tid.<\/p>\n<p><img decoding=\"async\" alt=\"Alexey Grachev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/96c574a880ad97e0802ae3006a60cee6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTills Promice-h\u00e4xan kom... Jag vet inte hur frontend-industrin lyckas, men de k\u00f6r hela tiden in sig i underliga avgrunder. De lyckades ocks\u00e5 skapa en \"h\u00e4xa\" av promises. Sedan l\u00f6ste man detta problem genom att l\u00e4gga till en ny primitiv \u2013 async\/await:<\/p>\n<p><img decoding=\"async\" alt=\"Alexey Grachev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/7c0679babbea4583de924292893d805c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMed asynkronitet \u00e4r problemet l\u00f6st. Async\/await \u00e4r en ganska popul\u00e4r konstruktion i olika spr\u00e5k. I Python och andra finns det en s\u00e5dan metod \u2013 den fungerar riktigt bra. Problemet \u00e4r l\u00f6st.<\/p>\n<p>Vilket problem \u00e4r inte l\u00f6st? Den exponentiellt \u00f6kande komplexiteten i ramverk, komplexiteten i ekosystemet och sj\u00e4lva programmen.<\/p>\n<p><img decoding=\"async\" alt=\"Alexey Grachev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/617fbc72e9e059bf608a48c84c5328f9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<ul>\n<li>Syntaxen i Javascript \u00e4r lite konstig. Vi vet alla om problemen med att addera en array och ett objekt och andra knepigheter.<\/li>\n<li>Javascript \u00e4r multiparadigmt. Just nu \u00e4r det en s\u00e4rskilt br\u00e5dskande fr\u00e5ga, n\u00e4r ekosystemet \u00e4r v\u00e4ldigt stort:\n<ul>\n<li>alla skriver i olika stilar \u2013 n\u00e5gra skriver strukturellt, andra skriver funktionellt, olika utvecklare skriver p\u00e5 olika s\u00e4tt;<\/li>\n<li>fr\u00e5n olika paket (packages) kommer olika paradigmer, n\u00e4r du anv\u00e4nder olika paket;<\/li>\n<li>det finns mycket \"skoj\" med funktionell programmering i Javascript \u2013 biblioteket ramda har dykt upp och nu kan ingen l\u00e4sa program skrivna med det biblioteket.<\/li>\n<\/ul>\n<p>\n<\/li>\n<li>Det h\u00e4r bidrar till en stor p\u00e5verkan p\u00e5 ekosystemet, och det har v\u00e4xt otroligt. Paketen \u00e4r inkompatibla med varandra: vissa anv\u00e4nder promises, andra async\/await, andra callbacks. Dessutom skriver man i olika paradigmer!<\/li>\n<li>Det leder till att projekt \u00e4r sv\u00e5ra att st\u00f6dja. Det \u00e4r sv\u00e5rt att hitta buggar om du inte kan l\u00e4sa koden.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Vad \u00e4r Web Assembly?<\/h3>\n<p>\nDe modiga killarna fr\u00e5n Mozilla Foundation och en rad andra f\u00f6retag har kommit p\u00e5 n\u00e5got som kallas Web Assembly. Vad \u00e4r det?<\/p>\n<p><img decoding=\"async\" alt=\"Alexey Grachev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/9ca5b1e0b7646ec7d6fa751d77780b41.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<ul>\n<li>Det \u00e4r en inbyggd virtuell maskin i webbl\u00e4saren som st\u00f6djer ett bin\u00e4rt format.<\/li>\n<li>Bin\u00e4ra program k\u00f6rs n\u00e4stan som inbyggda program, det vill s\u00e4ga webbl\u00e4saren beh\u00f6ver inte parsa all 'spagetti' Javascript-kod varje g\u00e5ng.<\/li>\n<li>Alla webbl\u00e4sare har meddelat st\u00f6d.<\/li>\n<li>Eftersom detta \u00e4r bytekod kan man skriva en kompilator f\u00f6r vilket spr\u00e5k som helst.<\/li>\n<li>De fyra st\u00f6rsta webbl\u00e4sarna levereras redan med st\u00f6d f\u00f6r Web Assembly.<\/li>\n<li>Snart f\u00f6rv\u00e4ntar vi oss nativt st\u00f6d i Go. En s\u00e5dan ny arkitektur har redan lagts till: GOARCH=wasm GOOS=js (snart). Just nu \u00e4r den, s\u00e5vitt jag f\u00f6rst\u00e5r, inte funktionell, men det finns ett uttalande om att det definitivt kommer att finnas i Go.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Vad ska man g\u00f6ra nu? GopherJS<\/h3>\n<p>\nEftersom vi \u00e4nnu inte har st\u00f6d f\u00f6r Web Assembly finns det en transpiler, GopherJS.<\/p>\n<p><img decoding=\"async\" alt=\"Alexey Grachev: 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 transpileras till \"ren\" Javascript.<\/li>\n<li>K\u00f6rs i alla webbl\u00e4sare \u2013 det finns inga nya funktioner som endast st\u00f6ds av moderna webbl\u00e4sare (detta \u00e4r Vanilla JS, som k\u00f6rs p\u00e5 allt som helst).<\/li>\n<li>Det finns st\u00f6d f\u00f6r n\u00e4stan allt som finns i Go, inklusive gorutiner och kanaler\u2026 \u2013 allt som vi \u00e4lskar och k\u00e4nner till.<\/li>\n<li>N\u00e4stan hela standardbiblioteket st\u00f6ds, f\u00f6rutom de paket som inte \u00e4r meningsfulla att st\u00f6dja i webbl\u00e4saren: syscall, n\u00e4tverksinteraktioner (det finns en net\/http-klient, men ingen server, och klienten emuleras via XMLHttpRequest). \u00d6verlag \u00e4r hela standardbiblioteket tillg\u00e4ngligt \u2013 h\u00e4r \u00e4r det i webbl\u00e4saren, h\u00e4r \u00e4r stdlib Go, som vi \u00e4lskar.<\/li>\n<li>Hela paketekosystemet i Go, alla tredjepartsl\u00f6sningar (templating och liknande) kan kompileras med GopherJS och k\u00f6ras i webbl\u00e4saren.<\/li>\n<\/ul>\n<p>\nAtt f\u00e5 GopherJS \u00e4r mycket enkelt \u2013 det \u00e4r ett vanligt Go-paket. Vi k\u00f6r go get, och vi har GopherJS-kommandot f\u00f6r att bygga applikationen:<\/p>\n<p><img decoding=\"async\" alt=\"Alexey Grachev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/4f96f9e437b532f9cb1a4f960a621293.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nS\u00e5 h\u00e4r ser ett litet hello world ut\u2026<\/p>\n<p><img decoding=\"async\" alt=\"Alexey Grachev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/e4b56385a6cac97fc75b09584da1bfbb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u2026En vanlig Go-program, ett vanligt paket fmt fr\u00e5n standardbiblioteket och Binding Js f\u00f6r att n\u00e5 webbl\u00e4sarens API. Println kommer slutligen att omvandlas till en console log och webbl\u00e4saren kommer att skriva \"Hello gophers\"! S\u00e5 enkelt \u00e4r det: vi g\u00f6r GopherJS build \u2013 k\u00f6r i webbl\u00e4saren \u2013 allt fungerar!<\/p>\n<h3>Vad finns f\u00f6r n\u00e4rvarande? Bindningar<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Alexey Grachev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/6adbc1f604580c3878775c45174444a2.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDet finns bindningar f\u00f6r alla popul\u00e4ra js-ramverk:<\/p>\n<ul>\n<li>JQuery;<\/li>\n<li>Angular.js;<\/li>\n<li>D3.js f\u00f6r att skapa diagram och arbeta med stora datam\u00e4ngder;<\/li>\n<li>React.js;<\/li>\n<li>VueJS;<\/li>\n<li>det finns till och med st\u00f6d f\u00f6r Electron (s\u00e5 vi kan redan nu skriva skrivbordsapplikationer med \"Electron\");<\/li>\n<li>och det mest underh\u00e5llande \u2013 \u00e4r WebGL (vi kan skapa fullgrafiska applikationer, inklusive spel med 3D-grafik, musik och alla funktioner);<\/li>\n<li>och m\u00e5nga fler bindningar till alla popul\u00e4ra javascript-ramverk och bibliotek.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Ramverk<\/h3>\n<p><\/p>\n<ol>\n<li>Det finns redan ett webbramverk som \u00e4r speciellt utvecklat f\u00f6r GopherJS \u2013 Vecty. Detta \u00e4r en fullst\u00e4ndig analog av React.js, men utvecklad i Go, med GopherJS-specifikation.<\/li>\n<li>Det finns spelframeworks (\u00f6verraskande nog!). Jag har hittat tv\u00e5 av de mest popul\u00e4ra:\n<ul>\n<li>Engo;<\/li>\n<li>Ebiten.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>\nJag ska visa ett par exempel p\u00e5 hur det ser ut och vad som redan kan skrivas i Go:<\/p>\n<p><img decoding=\"async\" alt=\"Alexey Grachev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/53365146c12b320fbf05334bdc6a79e5.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEller det alternativet (jag hittade ingen 3D-shooter, men kanske finns det en):<\/p>\n<p><img decoding=\"async\" alt=\"Alexey Grachev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/b1c0a9d6d91ad8a10a9b784cd8c7b1d0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Vad f\u00f6resl\u00e5r jag?<\/h3>\n<p>\nF\u00f6r n\u00e4rvarande befinner sig frontend-industrin i ett s\u00e5dant tillst\u00e5nd, att alla spr\u00e5k som tidigare klagade p\u00e5 Javascript nu kommer att str\u00f6mma dit. Nu kommer alla att kompilera till \"Web Assembly\". Vad beh\u00f6ver vi f\u00f6r att f\u00e5 en v\u00e4rdig plats d\u00e4r som \"gophers\"?<\/p>\n<p><img decoding=\"async\" alt=\"Alexey Grachev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/32c4a03f7a31def833942af6e59c70cb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nI Go \u00e4r det traditionellt sett en systemprogrammeringsspr\u00e5k, och det finns praktiskt taget inga bibliotek f\u00f6r att arbeta med UI. Det finns n\u00e5got, men det \u00e4r halv\u00f6vergivet och halvfunktionsdugligt.<\/p>\n<p>Och nu har vi ett bra tillf\u00e4lle att skapa UI-bibliotek p\u00e5 Go som kan k\u00f6ras p\u00e5 GopherJS! \u00c4ntligen kan vi skriva v\u00e5rt eget ramverk! Det \u00e4r dags att skriva ett ramverk, och det kommer att vara ett av de f\u00f6rsta och f\u00e5 tidig anpassning, och du kommer att bli en stj\u00e4rna (om det \u00e4r ett bra ramverk).<\/p>\n<p>Vi kan anpassa m\u00e4ngder av olika paket som redan finns i Go-ekosystemet f\u00f6r att passa webbl\u00e4sarens specifikationer (till exempel en templating-motor). De kommer redan att fungera, men vi kan skapa bekv\u00e4ma omslag f\u00f6r att enkelt kunna rendera inneh\u00e5ll direkt i webbl\u00e4saren. Dessutom kan vi skapa en tj\u00e4nst som kan rendera samma sak b\u00e5de p\u00e5 servern och klienten med samma kod \u2013 precis som frontend-utvecklare \u00e4lskar (men nu p\u00e5 Go).<\/p>\n<p>Vi kan skriva ett spel! Bara f\u00f6r skojs skull\u2026<\/p>\n<p>Det var allt fr\u00e5n mig.<\/p>\n<p><img decoding=\"async\" alt=\"Alexey Grachev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/ba08e0e65de0898e4f53abd00abb6dab.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Fr\u00e5gor<\/h3>\n<p>\n<b>Fr\u00e5ga (h\u00e4refter \u2013 F):<\/b> \u2013 Skriver jag i Go eller i Js?<\/p>\n<p><b>AG:<\/b> \u2013 Du skriver med Go-rutiner, kanaler, strukturer, inb\u00e4ddning \u2013 allt\u2026 Du prenumererar p\u00e5 ett event och skickar dit en funktion.<\/p>\n<p><b>L:<\/b> \u2013 S\u00e5 jag skriver i \"ren\" Js?<\/p>\n<p><b>AG:<\/b> \u2013 Nej, du skriver som om du anv\u00e4nde Go och kopplar upp dig mot webbl\u00e4sarens API (API:t har f\u00f6rblivit of\u00f6r\u00e4ndrat). Du kan skriva dina egna omslag s\u00e5 att meddelanden kommer till kanalen \u2013 det \u00e4r ju inte sv\u00e5rt.<\/p>\n<p><b>L:<\/b> \u2013 Vad s\u00e4gs om mobil?<\/p>\n<p><b>AG:<\/b> \u2013 Jag har absolut sett: det finns bindningar f\u00f6r Cordova som Js k\u00f6r. I React Native \u2013 jag vet inte; kanske finns det, kanske inte (jag har inte varit s\u00e5 intresserad). Spelmotorn N-go st\u00f6djer b\u00e5de mobilapplikationer \u2013 b\u00e5de iOS och Android.<\/p>\n<p><b>L:<\/b> \u2013 Fr\u00e5ga om Web Assembly. Det tar upp allt mer plats, trots komprimering och 'zipning'\u2026 Kommer vi att d\u00f6da frontend-v\u00e4rlden \u00e4nnu mer p\u00e5 det h\u00e4r s\u00e4ttet?<\/p>\n<p><b>AG:<\/b> \u2013 Web Assembly \u00e4r ett bin\u00e4rt format, och per standard kan det inte vara st\u00f6rre \u00e4n text i den slutliga releasen\u2026 Du dras till runtime, men det \u00e4r samma sak som att dra in JavaScripts standardbibliotek n\u00e4r det inte finns, d\u00e4rf\u00f6r anv\u00e4nder vi n\u00e5gon typ av Lodash. Jag vet inte hur mycket Lodash tar.<\/p>\n<p><b>L:<\/b> \u2013 Tydligt mindre \u00e4n runtime\u2026<\/p>\n<p><b>AG:<\/b> \u2013 I \"rent\" Javascript?<\/p>\n<p><b>L:<\/b> \u2013 Ja. Vi komprimerar det ju innan vi skickar\u2026<\/p>\n<p><b>AG:<\/b> \u2013 Men det h\u00e4r \u00e4r ju text\u2026 I allm\u00e4nhet \u00e4r en megabyte ganska mycket, men det \u00e4r allt (du har hela runtime). Sedan skriver du din aff\u00e4rslogik som \u00f6kar din bin\u00e4rfil med 1 %. Jag ser inte att det d\u00f6dar frontend. Dessutom kommer Web Assembly att fungera snabbare \u00e4n Javascript av uppenbara sk\u00e4l \u2013 det beh\u00f6ver inte tolkas.<\/p>\n<p><b>L:<\/b> \u2013 Det \u00e4r fortfarande en diskussionspunkt\u2026 Det finns \u00e4nnu ingen standardimplementering av \"Vasm\" (Web Assembly) som g\u00f6r att man kan d\u00f6ma entydigt. Konceptuellt \u2013 ja: vi f\u00f6rst\u00e5r alla att bin\u00e4rfilen b\u00f6r vara snabbare, men den nuvarande implementeringen av V8 \u00e4r v\u00e4ldigt effektiv.<\/p>\n<p><b>AG:<\/b> \u2013 Ja.<\/p>\n<p><b>L:<\/b> \u2013 Kompileringen fungerar verkligen mycket bra d\u00e4r och det \u00e4r inte s\u00e4kert att det kommer att ge stora f\u00f6rdelar.<\/p>\n<p><b>AG:<\/b> \u2013 Stora killar jobbar ocks\u00e5 med Web Assembly.<\/p>\n<p><b>L:<\/b> \u2013 Just nu verkar det som att det \u00e4r sv\u00e5rt att d\u00f6ma om Web Assembly. Det har pratats i flera \u00e5r, men verkliga framsteg som man kan ta p\u00e5 \u00e4r f\u00e5.<\/p>\n<p><b>AG:<\/b> \u2013 M\u00f6jligt. Vi f\u00e5r se.<\/p>\n<p><b>L:<\/b> \u2013 Vi har inga problem p\u00e5 backend\u2026 Kanske borde vi l\u00e4mna dessa problem till frontend? Varf\u00f6r ge oss in d\u00e4r?<\/p>\n<p><b>AG:<\/b> \u2013 Vi m\u00e5ste ha en personal av frontendare.<\/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=\"Spela 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>Lite reklam \ud83d\ude42<\/h3>\n<p>\nTack f\u00f6r att ni stannar kvar hos oss. Gillar ni v\u00e5ra artiklar? Vill ni se fler intressanta material? St\u00f6d oss genom att g\u00f6ra en best\u00e4llning eller rekommendera oss till era v\u00e4nner, <noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/cloudvps\/nl\">moln-VPS f\u00f6r utvecklare fr\u00e5n $4,99<\/a><\/noindex>, <b>en unik motsvarighet till entry-level servrar som vi har skapat f\u00f6r er:<\/b> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/347386\/\">Allt om VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps fr\u00e5n $19 eller hur man korrekt delar en server?<\/a><\/noindex> (alternativ med RAID1 och RAID10 finns tillg\u00e4ngliga, upp till 24 k\u00e4rnor och upp till 40GB DDR4).<\/p>\n<p><b>Dell R730xd \u00e4r tv\u00e5 g\u00e5nger billigare i datacentret Equinix Tier IV i Amsterdam?<\/b> Bara hos oss <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 fr\u00e5n $199<\/a><\/noindex> i Nederl\u00e4nderna! <b>Dell R420 \u2014 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB \u2014 fr\u00e5n $99!<\/b><\/b> L\u00e4s om <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/329618\/\">Hur man bygger en f\u00f6retagsinfrastruktur med Dell R730xd E5-2650 v4-servrar som kostar 9000 euro f\u00f6r en br\u00e5kdel?<\/a><\/noindex><br \/>\n<br \/>K\u00e4lla: <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.4 - 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\/sv\/blog\/administrirovanie\/aleksej-grachyov-go-frontend\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\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\/sv\/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 Maj 2018: Ledare: \u2013 Hej alla.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/aleksej-grachyov-go-frontend","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/71628","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=71628"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/71628\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/71629"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=71628"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=71628"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=71628"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}