{"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\/et\/blog\/administrirovanie\/aleksej-grachyov-go-frontend","title":{"rendered":"Aleksei Gra\u010dev: Go Frontend","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Kyiv Go Meetup Mai 2018:<\/p>\n<p><img decoding=\"async\" alt=\"Aleksei Gra\u010dev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/9974ab1db5347a41e4ec5110c3d2ef56.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>Esitleja:<\/b> \u2013 Tere k\u00f5igile! Ait\u00e4h, et tulite! T\u00e4na on meil kaks ametlikku esinejat \u2013 Ljo\u0161a ja Vanya. Kui aega j\u00e4\u00e4b, on veel kaks. Esimene esineja on Aleksei Grachyov, kes r\u00e4\u00e4gib meile GopherJS-st.<\/p>\n<p><b>Aleksei Grachyov (edaspidi \u2013 AG):<\/b> \u2013 Olen Go-arendaja ja kirjutan veebiteenuseid Goga. M\u00f5nikord tuleb mul tegeleda ka frontendiga, vahel tuleb sealt k\u00e4sitsi sekkuda. Soovin jagada oma kogemust ja uurimusi Go-st frontendis.<\/p>\n<p>Legend on selline: alustame vestlust, miks me soovime Go-d frontendis k\u00e4ivitada, seej\u00e4rel arutame, kuidas seda teha. On kaks teed \u2013 Web Assembly ja GopherJS. Vaatame, millises seisundis need lahendused on ja mida saab teha.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Mis on valesti frontendiga?<\/h3>\n<p>\nKas k\u00f5ik on n\u00f5us, et frontendis on k\u00f5ik h\u00e4sti?<\/p>\n<p><img decoding=\"async\" alt=\"Aleksei Gra\u010dev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/065119e699053306072b1d7aa3183b34.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTestide puudumine? Aeglane kogumine? \u00d6kos\u00fcsteem? Hea k\u00fcll.<\/p>\n<p>Frontendist r\u00e4\u00e4kides meeldib mulle \u00fcks tsitaat, mille \u00fctles \u00fcks frontend-arendaja oma raamatutes:<\/p>\n<p><img decoding=\"async\" alt=\"Aleksei Gra\u010dev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/e69eba4fc073c0b59789859c94ba29f2.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJavascriptis ei ole t\u00fc\u00fcbiv\u00f5imet. N\u00fc\u00fcd hakkan nimetamisi probleeme, millega ma oma t\u00f6\u00f6s kokku puutusin, ja selgitama, kuidas neid lahendatakse.<\/p>\n<p>T\u00fc\u00fcbiv\u00f5imet on tegelikult raske nimetada t\u00fc\u00fcbiv\u00f5imete s\u00fcsteemiks Javascriptis \u2013 seal on stringid, mis t\u00e4histavad objekti t\u00fc\u00fcpi, kuid tegelikult pole sellel t\u00fc\u00fcpidega mingit seost. Selle probleemi lahendas TypeScript (Javascripti pealisehitust) ja Flow (Javascripti staatiline kontrollija). Frontend on juba j\u00f5udnud lahendama Javascripti halva t\u00fc\u00fcbiv\u00f5ime s\u00fcsteemi probleemi.<\/p>\n<p><img decoding=\"async\" alt=\"Aleksei Gra\u010dev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/257542cbfd2e316fbe0a0033056fff6f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nBrahvtifoodust standardset raamatukogu ei ole \u2013 on m\u00f5ned sisseehitatud objektid ja \u201emaagilised\u201c funktsioonid brauserites. JavaScriptis puudub standardne raamatukogu. Selle probleemi lahendas kunagi jQuery (k\u00f5ik kasutasid jQuery-d koos k\u00f5igi prototype\u2019ide, abifunktsioonide ja funktsioonidega, mida oli vaja kasutada). N\u00fc\u00fcd aga k\u00f5ik kasutavad Lodashi:<\/p>\n<p><img decoding=\"async\" alt=\"Aleksei Gra\u010dev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/4eae8a8f19776028bd88fe8f7a751605.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCallback hell. Arvan, et k\u00f5ik on n\u00e4inud Javascripti koodi umbes viis aastat tagasi, ja see n\u00e4gi v\u00e4lja nagu \u201enuudli\u201d jahtum, mis koosneb uskumatust callbackide \u00e4\u00e4rimisest. N\u00fc\u00fcd on see probleem lahendatud (ES-15 v\u00f5i ES-16 ilmumisega), Javascripti on lisatud lubadused (promises) ja k\u00f5ik hingavad m\u00f5nda aega kergemalt.<\/p>\n<p><img decoding=\"async\" alt=\"Aleksei Gra\u010dev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/96c574a880ad97e0802ae3006a60cee6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKuni tuleb Promise hell... Ma ei tea, kuidas frontendit\u00f6\u00f6stus suudab, aga nad venduvad end igasugustesse kummalistesse jamadesse. Nad suutsid isegi \u201elubadustel\u201d teha helli. Hiljem lahendati see probleem, lisades uue primitiivi \u2013 async\/await:<\/p>\n<p><img decoding=\"async\" alt=\"Aleksei Gra\u010dev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/7c0679babbea4583de924292893d805c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAs\u00fcnkroonsuse probleem on lahendatud. Async\/await \u2013 on \u00fcsna populaarne primitiiv erinevates keeltes. Pythonis ja muudes keeltes on selline l\u00e4henemine olemas \u2013 see on v\u00e4ga hea. Probleem on lahendatud.<\/p>\n<p>Milline probleem ei ole lahendatud? Geomeetriliselt kasvav keerukus raamistike, \u00f6kos\u00fcsteemi ja tegelikult programmide osas.<\/p>\n<p><img decoding=\"async\" alt=\"Aleksei 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>Javascripti s\u00fcntaks on veidi kummaline. K\u00f5ik teame probleeme massiivi ja objekti liitmisel ja muid nalju.<\/li>\n<li>Javascript on mitme paradigma s\u00fcsteem. Praegu on see eriti aktuaalne, kus \u00f6kos\u00fcsteem on v\u00e4ga suur:\n<ul>\n<li>k\u00f5ik kirjutavad erinevates stiilides \u2013 keegi kirjutab struktuurselt, keegi kirjutab funktsionaalset, erinevad arendajad kirjutavad erinevalt;<\/li>\n<li>erinevatest pakettidest (packages) erinevad paradigmareeglid, kui kasutate erinevaid pakette;<\/li>\n<li>on palju \u201emeelelahutust\u201d funktsionaalses programmeerimises Javascriptis \u2013 ilmus raamatukogu rambda ja n\u00fc\u00fcd ei suuda keegi lugeda selle raamatukogus kirjutatud programme.<\/li>\n<\/ul>\n<p>\n<\/li>\n<li>See k\u00f5ik toob \u00f6kos\u00fcsteemile suure m\u00f5ju ja see on tohutult kasvanud. Paketid ei \u00fchildu \u00fcksteisega: keegi - lubadustel, keegi - async\/await-s, keegi - callbackidel. Lisaks kirjutavad ja erinevates paradigmades!<\/li>\n<li>See viib selleni, et projekti on keeruline toetada. Raskendat on leida t\u00f5rge, kui te ei suuda koodi lugeda.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Mis on Web Assembly?<\/h3>\n<p>\nTublid poisid Mozilla Foundationist ja mitmest muust ettev\u00f5ttest m\u00f5tlesid v\u00e4lja midagi sellist nagu Web Assembly. Mis see on?<\/p>\n<p><img decoding=\"async\" alt=\"Aleksei 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>See on brauseris sisseehitatud virtuaalne masin, mis toetab binaarset formaati.<\/li>\n<li>Binaarsed programmid saadetakse sinna, need t\u00e4idetakse praktiliselt natiivsete v\u00f5imalustega, mis t\u00e4hendab, et brauser ei pea iga kord kogu \u201enuudli\u201d Javascripti koodi parsima.<\/li>\n<li>K\u00f5ik brauserid on kinnitanud toetust.<\/li>\n<li>Kuna see on baidikood, on v\u00f5imalik kirjutada kompilaator mistahes keele jaoks.<\/li>\n<li>Neli peamist brauserit on juba varustatud Web Assembly toe.<\/li>\n<li>Peagi ootame Go loomulikku tuge. Selline uus arhitektuur on juba lisatud: GOARCH=wasm GOOS=js (peagi). Seni, nagu ma m\u00f5istan, ei ole see funktsionaalne, kuid on avaldatud teadet, et see kindlasti tuleb Go-sse.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Mida praegu teha? GopherJS<\/h3>\n<p>\nKuna meil ei ole Web Assembly tuge, on olemas selline transpiler nagu GopherJS.<\/p>\n<p><img decoding=\"async\" alt=\"Aleksei 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>Go kood transpileerub \u201epuhtaks\u201d Javascriptiks.<\/li>\n<li>K\u00e4ivitatakse k\u00f5ikides brauserites \u2013 seal ei ole uusi funktsioone, mida toetavad ainult kaasaegsed brauserid (see on Vanilla JS, mis t\u00f6\u00f6tab k\u00f5iges, mis tahes seadmes).<\/li>\n<li>Peaaegu k\u00f5ik Go omadused, sealhulgas gorutiinid ja kanalid, on toetatud\u2026 \u2013 k\u00f5ik, mida me armastame ja tunneme.<\/li>\n<li>Peaaegu kogu standardteek on toetatud, v\u00e4lja arvatud need paketid, millel pole m\u00f5tet brauseris t\u00f6\u00f6tada: syscall, neti suhtlemine (olemas on net\/http klient, kuid serverit pole, klient emuleeritakse l\u00e4bi XMLHttpRequest). Kokkuv\u00f5ttes on kogu standardteek saadaval \u2013 siin see on brauseris, siin on stdlib Go, mida me armastame.<\/li>\n<li>Kogu Go paketi \u00f6kos\u00fcsteemi, k\u00f5ik kolmandate osapoolte lahendused (mallid jne) saab kompileerida GopherJS-iga ja k\u00e4ivitada seda brauseris.<\/li>\n<\/ul>\n<p>\nGopherJS-i hankimine on v\u00e4ga lihtne \u2013 see on tavaline Go-pakett. Teeme go get ja meil on GopherJS k\u00e4sk, et rakendust ehitada:<\/p>\n<p><img decoding=\"async\" alt=\"Aleksei Gra\u010dev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/4f96f9e437b532f9cb1a4f960a621293.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSiin on selline v\u00e4ike hello world...<\/p>\n<p><img decoding=\"async\" alt=\"Aleksei Gra\u010dev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/e4b56385a6cac97fc75b09584da1bfbb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n...Tavaline Go programm, tavaline fmt paketist standardteegist ja Binding Js, et brauseri API-le ligi p\u00e4\u00e4seda. Println muudetakse l\u00f5puks console logiks ja brauser kirjutab 'Hello gophers'! Nii lihtne: teeme GopherJS build \u2013 k\u00e4ivitame brauseris \u2013 k\u00f5ik t\u00f6\u00f6tab!<\/p>\n<h3>Mis on hetkel saadaval? Bindings<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Aleksei Gra\u010dev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/6adbc1f604580c3878775c45174444a2.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOn bindingeid k\u00f5igile populaarsetele js-raamistikele:<\/p>\n<ul>\n<li>JQuery;<\/li>\n<li>Angular.js;<\/li>\n<li>D3.js graafikute ja suurte andmete t\u00f6\u00f6tlemiseks;<\/li>\n<li>React.js;<\/li>\n<li>VueJS;<\/li>\n<li>isegi on olemas tugi Electron'ile (praegu saame kirjutada lauaarvuti rakendusi 'Elecron'iga);<\/li>\n<li>ja k\u00f5ige huvitavam \u2013 see on WebGL (saame teha graafikarakendusi, sealhulgas 3D-m\u00e4nge, muusikat ja k\u00f5ike muud vajalikku);<\/li>\n<li>ja v\u00e4ga palju muid bindingeid k\u00f5ikidele populaarsetele JavaScripti raamistikutele ja teekidele.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Framework<\/h3>\n<p><\/p>\n<ol>\n<li>GopherJS-ile on juba v\u00e4lja t\u00f6\u00f6tatud spetsiaalne veebiraamistik \u2013 Vecty. See on t\u00e4isfunktsionaalne analoog React.js-ile, kuid loodud Go keeles, GopherJS spetsiifikaga.<\/li>\n<li>On ka m\u00e4nguteeke (\u00fcllatus!). Leidsin kaks populaarseimat:\n<ul>\n<li>Engo;<\/li>\n<li>Ebiten.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>\nKannan paar n\u00e4idet sellest, kuidas see v\u00e4lja n\u00e4eb ja mida on juba v\u00f5imalik Go-s kirjutada:<\/p>\n<p><img decoding=\"async\" alt=\"Aleksei Gra\u010dev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/53365146c12b320fbf05334bdc6a79e5.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nV\u00f5i selline variant (3D-laskurite m\u00e4ngu ei leidnud, kuid v\u00f5ib-olla on see olemas):<\/p>\n<p><img decoding=\"async\" alt=\"Aleksei Gra\u010dev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/b1c0a9d6d91ad8a10a9b784cd8c7b1d0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Mida ma ettepanen?<\/h3>\n<p>\nPraegu on frontend-t\u00f6\u00f6stus sellises seisus, et igasugused keeled, mis varem nutsid JavaScripti p\u00e4rast, tormavad sinna sisse. N\u00fc\u00fcd kompileeritakse k\u00f5ik 'Web Assembly'. Mida me vajame, et seal 'gofiri' v\u00e4\u00e4rikas koht leida?<\/p>\n<p><img decoding=\"async\" alt=\"Aleksei Gra\u010dev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/32c4a03f7a31def833942af6e59c70cb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nGo keeles on traditsiooniliselt arvatud, et see on s\u00fcsteemi programmeerimiskeel, ja praktiliselt puuduvad UI jaoks raamatukogud. Midagi on, kuid need on poolik, poolik funktsionaalne.<\/p>\n<p>Ja n\u00fc\u00fcd on hea v\u00f5imalus luua Go-s UI raamatukogud, mis t\u00f6\u00f6tavad GopherJS-is! Saame l\u00f5puks kirjutada oma raamistikku! On see aeg, mil saame kirjutada raamistikku ja see saab olema \u00fcks esimesi ning omandab varajase kohandamise ning sina oled staar (kui see raamistik on hea).<\/p>\n<p>Saame kohandada palju erinevaid pakette, mis juba on Go \u00f6kos\u00fcsteemis, brauseri spetsiifiliseks (nt mallimootor). Need hakkavad t\u00f6\u00f6tama, saame mugavad \u00fcmberringed teha, et sisu oleks kerge brauseris renderdada. Pluss, saame teha n\u00e4iteks teenuse, mis oskab renderdada sama serveris ja frontendis, kasutades sama koodi \u2013 just nii nagu frontend-arendajad armastavad (ainult n\u00fc\u00fcd Go-s).<\/p>\n<p>V\u00f5ime kirjutada m\u00e4ngu! Just for fun...<\/p>\n<p>Mul on k\u00f5ik.<\/p>\n<p><img decoding=\"async\" alt=\"Aleksei Gra\u010dev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/ba08e0e65de0898e4f53abd00abb6dab.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>K\u00fcsimused<\/h3>\n<p>\n<b>K\u00fcsimus (edasi \u2013 K):<\/b> \u2013 Kas ma kirjutan Go-s v\u00f5i Js-is?<\/p>\n<p><b>AG:<\/b> \u2013 Sa kirjutad Go rutaanide, kanalite, struktuuride, embedding \u2013 k\u00f5ike\u2026 Sa tellid event'i, edastad sinna funktsiooni.<\/p>\n<p><b>K:<\/b> \u2013 Kas see t\u00e4hendab, et ma kirjutan 'puhtas' Js-is?<\/p>\n<p><b>AG:<\/b> \u2013 Ei, sa kirjutad nagu Go-s ja \u00fchendud brauseri API-ga (API ei ole muudetud). Sa saad kirjutada oma \u00fcmberringed, et kanalisse tuleksid s\u00f5numid \u2013 see ei ole keeruline.<\/p>\n<p><b>K:<\/b> \u2013 Kuidas on mobiiliga?<\/p>\n<p><b>AG:<\/b> \u2013 Olen kindlasti n\u00e4inud: on olemas bindingeid Cordova patch'i jaoks, mida Js k\u00e4ivitab. React Native \u2013 ei tea; v\u00f5ib-olla on, aga v\u00f5ib-olla ei ole (ei ole eriti uurinud). M\u00e4ngu mootor N-go toetab ka mobiilirakendusi \u2013 nii iOs kui Android.<\/p>\n<p><b>K:<\/b> \u2013 K\u00fcsimus Web Assembly kohta. Ruumi on aina rohkem, vaatamata kompressioonile, 'zipped'\u2026 Kas me ei h\u00e4vita sellega frontendmaailma veelgi rohkem?<\/p>\n<p><b>AG:<\/b> \u2013 Web Assembly on binaarne formaat ja binaarne ei saa vaikimisi l\u00f5ppversioonis olla suurem kui tekst\u2026 Teid t\u00f5ukab runtime, kuid see on sama, mis JavaScripti standardteegi t\u00f5ukamine, kui seda ei ole, seega kasutame mingit Lodashi. Ma ei tea, kui palju Lodash ruumi v\u00f5tab.<\/p>\n<p><b>K:<\/b> \u2013 Kindlasti v\u00e4hem kui runtime\u2026<\/p>\n<p><b>AG:<\/b> \u2013 'Puhtas' JavaScriptis?<\/p>\n<p><b>K:<\/b> \u2013 Jah. Me ju kompressime selle enne saatmist\u2026<\/p>\n<p><b>AG:<\/b> \u2013 Aga see on ju tekst\u2026 \u00dches\u00f5naga, megabait on justkui palju, kuid see on k\u00f5ik (sul on kogu runtime olemas). Edasi kirjutad oma \u00e4riloogika, mis suurendab sinu binaari 1%. Seni ma ei n\u00e4e, et see h\u00e4vitaks frontend'i. Eriti arvestades, et Web Assembly t\u00f6\u00f6tab kiiremini kui JavaScript ilmselge p\u00f5hjuse t\u00f5ttu \u2013 seda ei pea anal\u00fc\u00fcsima.<\/p>\n<p><b>K:<\/b> \u2013 Veel pole veel selget teavet\u2026 Praegu ei ole mingit ideaalset rakendust \"Web Assembly\", et saaks \u00fcheselt hinnata. Kontseptuaalselt \u2013 jah: me k\u00f5ik m\u00f5istame, et binaar peab olema kiirem, kuid praegune V8 rakendus on v\u00e4ga efektiivne.<\/p>\n<p><b>AG:<\/b> \u2013 Jah.<\/p>\n<p><b>K:<\/b> \u2013 Kompilleerimine t\u00f6\u00f6tab seal t\u00f5eliselt h\u00e4sti ja ei ole kindel, et see toob kaasa suurt eelist.<\/p>\n<p><b>AG:<\/b> \u2013 Web Assembly't arendavad ka suured tegijad.<\/p>\n<p><b>K:<\/b> \u2013 Praegu on mulle tundunud, et Web Assembly kohta on veel vara hinnangut anda. Mitu aastat on juba r\u00e4\u00e4gitud, kuid reaalseid saavutusi, mida katsuda, on v\u00e4he.<\/p>\n<p><b>AG:<\/b> \u2013 V\u00f5ib-olla. J\u00e4tkame j\u00e4lgimist.<\/p>\n<p><b>K:<\/b> \u2013 Meil ei ole probleeme backend'is\u2026 Kas ei v\u00f5iks neid probleeme j\u00e4tta frontend'i? Miks peaks sinna sekkuma?<\/p>\n<p><b>AG:<\/b> \u2013 Peame hoidma fronthendi tiimi.<\/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=\"Vaata videot\" 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>Veidi reklaami \ud83d\ude42<\/h3>\n<p>\nAit\u00e4h, et olete meiega. Kas teile meeldivad meie artiklid? Kas soovite n\u00e4ha rohkem huvitavaid materjale? Toetage meid, tehes tellimuse v\u00f5i soovitades meid tuttavatele. <noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/cloudvps\/nl\">pilve VPS arendajatele alates $4,99<\/a><\/noindex>, <b>ainulaadne sisenemise taseme serverite analoog, mille oleme teie jaoks v\u00e4lja m\u00f5elnud:<\/b> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/347386\/\">Kogu t\u00f5de VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps alates $19 v\u00f5i kuidas \u00f5ieti serverit jagada?<\/a><\/noindex> (saadaval on RAID1 ja RAID10 variandid, kuni 24 s\u00fcdamikku ja kuni 40GB DDR4).<\/p>\n<p><b>Kas Dell R730xd on kaks korda odavam Equinixi Tier IV andmete keskuses Amsterdamis?<\/b> Ainult meie juures <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 alates $199<\/a><\/noindex> Hollandi turul! <b>Dell R420 \u2014 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB \u2014 alates $99!<\/b><\/b> Lugege, kuidas <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/329618\/\">Luua ettev\u00f5tte tasemel infrastruktuur Dell R730xd E5-2650 v4 serveritega, mille hind on 9000 eurot, madala hinnaga?<\/a><\/noindex><br \/>\n<br \/>Allikas: <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\/et\/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=\"et_EE\" \/>\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\/et\/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\udd47Aleksei Gra\u010djov: Go Frontend | ProHoster","description":"Kyiv Go Meetup mai 2018: Juhendaja: \u2013 K\u00f5igile.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/aleksej-grachyov-go-frontend","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","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\/et\/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\/et\/wp-json\/wp\/v2\/posts\/71628","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=71628"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/71628\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/71629"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=71628"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=71628"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=71628"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}