{"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":"Alexey Grachev: Go Frontend","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Kyiv Go Meetup Mai 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>Moderaator:<\/b> \u2013 Tere k\u00f5igile! Ait\u00e4h, et olete siin kohal! T\u00e4na on meil kaks ametlikku esinejat \u2013 L\u0451\u0161a ja Vanya. Kui meil on piisavalt aega, tuleb veel kaks. Esimene esineja on Aleksei Gra\u010d\u0451v, kes r\u00e4\u00e4gib meile GopherJS-ist.<\/p>\n<p><b>Aleksei Gra\u010d\u0451v (edaspidi \u2013 AG):<\/b> \u2013 Ma olen Go-arendaja ja teen veebiteenuseid Go-s. M\u00f5nikord tuleb mul tegeleda ka front-endiga, vahel pean sinna ise k\u00e4ega kallale minema. Soovin r\u00e4\u00e4kida oma kogemusest ja uuringutest Go-s front-endis.<\/p>\n<p>Legendi kohaselt: esmalt r\u00e4\u00e4gime, miks me tahame Go-d front-endis k\u00e4ivitada, ja seej\u00e4rel r\u00e4\u00e4gime, kuidas seda teha. On kaks teed \u2013 Web Assembly ja GopherJS. Vaatame, millises seisus need lahendused on ja mida on v\u00f5imalik teha.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Mis on valesti front-endiga?<\/h3>\n<p>\nKas k\u00f5ik on n\u00f5us, et front-end on h\u00e4sti korras?<\/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 \/>\nTestid on v\u00e4hesed? Aeglane koostamine? \u00d6kos\u00fcsteem? H\u00e4sti.<\/p>\n<p>Front-endi kohta meeldib mulle tsitaat, mille \u00fctles \u00fcks front-end arendajatest oma raamatus:<\/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 \/>\nJavascriptis puudub t\u00fc\u00fcbih\u00fcvitise s\u00fcsteem. N\u00fc\u00fcd hakkan mainima probleeme, millega olen oma t\u00f6\u00f6s kokku puutunud, ja selgitan, kuidas neid lahendatakse.<\/p>\n<p>T\u00fc\u00fcbih\u00fcvitise s\u00fcsteemi on raske nimetada t\u00fc\u00fcbih\u00fcvitise s\u00fcsteemiks Javascriptis \u2013 seal on stringid, mis t\u00e4histavad objekti t\u00fc\u00fcpi, kuid see ei ole tegelikult omavahel seotud t\u00fc\u00fcpidega. See probleem on lahendatud TypeScriptis (Javascripti pealiskihis) ja Flow-s (Javascripti t\u00fc\u00fcpide staatiline kontrollija). Tegelikult on front-end juba j\u00f5udnud lahenduseni Javascripti kehva t\u00fc\u00fcbih\u00fcvitise probleemi osas.<\/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 \/>\nBrahvis pole sellist standardset teeki olemas \u2013 seal on m\u00f5ned sisseehitatud objektid ja \"maagilised\" funktsioonid brauserites. Kuid Javascriptis puudub selline standardne teek. See probleem lahendati kunagi jQuery abil (k\u00f5ik kasutasid jQuery-d koos k\u00f5igi protot\u00fc\u00fcpide, abifunktsioonide ja funktsioonidega, mis on t\u00f6\u00f6ks vajalikud). Praegu kasutab k\u00f5ik Lodashi:<\/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-i p\u00f5rgu. Arvan, et k\u00f5ik on n\u00e4inud koodi Javascriptis umbes 5 aastat tagasi, ja see n\u00e4gi v\u00e4lja nagu \"nuudli\" imeline hargnemine callbackidest. N\u00fc\u00fcd on see probleem lahendatud (koos ES-15 v\u00f5i ES-16 tulekuga), Javascriptisse on lisatud lubadused (promises) ja k\u00f5ik saavad hetkeks kergemalt hingata.<\/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 \/>\nKuni Promice-i p\u00f5rguni\u2026 Ei tea, kuidas front-end t\u00f6\u00f6stus suudab, aga nad ajavad end pidevalt kummalistesse olukordadesse. Nad suutsid teha p\u00f5rgu ka \"lubadustes\". Seej\u00e4rel lahendati probleem, lisades uue primaadi \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 \/>\nAs\u00fcnkroonsuse probleem on lahendatud. Async\/await on erinevates keeltes \u00fcsna populaarne primitiiv. Pythonis ja mujal on selline l\u00e4henemine ja see on \u00fcsna hea. Probleem on lahendatud.<\/p>\n<p>Milline probleem on lahendamata? Geomeetrilise progressiooniga kasvavad raamistikud, \u00f6kos\u00fcsteemi keerukus ja programmeerimine ise.<\/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>JavaScripti s\u00fcntaks on veidi kummaline. Me k\u00f5ik teame muresid massiivi ja objekti liitmisega ning teisi nalju.<\/li>\n<li>JavaScript on mitme paradigma keel. Praegu on see eriti aktuaalne s\u00fcsteem, kui \u00f6kos\u00fcsteem on v\u00e4ga suur:\n<ul>\n<li>k\u00f5ik kirjutavad erinevates stiilides \u2013 m\u00f5ned kirjutavad strukturaalselt, m\u00f5ned funktsionaalselt, erinevad arendajad kirjutavad erinevalt;<\/li>\n<li>erinevatest paketidest erinevad paradigmata, kui kasutate erinevaid pakette;<\/li>\n<li>funktsionaalse programmeerimisega seondub JavaScriptis palju \"nalja\" \u2013 v\u00e4lja tuli rambda teek ja n\u00fc\u00fcd ei suuda keegi lugeda selle teegi raames kirjutatud programme.<\/li>\n<\/ul>\n<p>\n<\/li>\n<li>See k\u00f5ik toob \u00f6kos\u00fcsteemi suurte m\u00f5jude, ja see on uskumatu suurenenud. Paketid ei \u00fchildu omavahel: m\u00f5ned kasutavad lubadusi, teised async\/await, m\u00f5ned kolmanda osapoole funktsioonide p\u00f5hjal. Ja nad kirjutavad ka erinevates paradigmas!<\/li>\n<li>See viib selleni, et projekti on raske toetada. Vigade leidmine on keeruline, kui te ei suuda koodi lugeda.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Mis on Web Assembly?<\/h3>\n<p>\nJulged vennad Mozilla Fondist ja mitmetest teistest ettev\u00f5tetest tulid v\u00e4lja sellise asjaga nagu Web Assembly. Mis see on?<\/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>See on brauserisse sisseehitatud virtuaalmasin, mis toetab binaarset formaati.<\/li>\n<li>Binaarsed programmid j\u00f5uavad sinna, neid t\u00e4idetakse praktiliselt natiivselt, see t\u00e4hendab, et brauser ei pea iga kord kogu JavaScripti \u201enuudlit\u201c parsiima.<\/li>\n<li>K\u00f5ik brauserid on v\u00e4ljendanud toetust.<\/li>\n<li>Kuna see on baitkood, v\u00f5ib mis tahes keele jaoks kirjutada kompilaatori.<\/li>\n<li>Neli peamist brauserit juba toetavad Web Assembly't.<\/li>\n<li>Peagi ootame natiivset tuge Go jaoks. Selline uus arhitektuur on juba lisatud: GOARCH=wasm GOOS=js (varsti). Praegu, nagu ma aru saan, ei ole see funktsionaalne, kuid on teadaanne, et see kindlasti tuleb Go'sse.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Mida teha praegu? GopherJS<\/h3>\n<p>\nKuna meil ei ole Web Assembly tuge, on olemas selline transpailija nagu 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>Go kood transpileeritakse \u201epuhtaks\u201c JavaScriptiks.<\/li>\n<li>K\u00e4ivitub k\u00f5ikides brauserites - seal pole uusi funktsioone, mida toetavad ainult uuemad brauserid (see on Vanilla JS, mis t\u00f6\u00f6tab igal pool).<\/li>\n<li>Peaaegu k\u00f5ik, mis Go-s on, on toetatud, sealhulgas gorutiinid ja kanalid\u2026 \u2013 k\u00f5ik, mida me armastame ja tunneme.<\/li>\n<li>Peaaegu kogu standardraamatukogu on toetatud, v\u00e4lja arvatud need paketid, mille toetamine brauseris pole m\u00f5ttekas: syscall, v\u00f5rguvahetused (on net\/http klient, kuid ei ole serverit, klient simuleeritakse l\u00e4bi XMLHttpRequest). \u00dcldiselt on kogu standardraamatukogu saadaval \u2013 siin see on brauseris, siin on stdlib Go, mida me armastame.<\/li>\n<li>Go paketi kogu \u00f6kos\u00fcsteem, k\u00f5ik kolmanda osapoole lahendused (mallide loomine jne) saab kompileerida GopherJS-i abil ja seda brauseris k\u00e4ivitada.<\/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-i k\u00e4sk, et rakendust ehitada:<\/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 \/>\nSiin on selline v\u00e4ike tervitamine\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\u2026Tavaline Go programm, tavaline fmt standardraamatukogu ja JavaScripti sidumine, et p\u00e4\u00e4seda brauseri API-le. Println muudetakse l\u00f5puks konsoli logiks ja brauser kirjutab \u201cTere, gopherid\u201d! Nii lihtne: teeme GopherJS build \u2013 k\u00e4ivitame brauseris \u2013 k\u00f5ik t\u00f6\u00f6tab!<\/p>\n<h3>Mis praegu olemas on? Sidumised<\/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 \/>\nOn sidumised k\u00f5igi populaarsete js-raamistikega:<\/p>\n<ul>\n<li>JQuery;<\/li>\n<li>Angular.js;<\/li>\n<li>D3.js graafikute loomise ja suurte andmete t\u00f6\u00f6tlemiseks;<\/li>\n<li>React.js;<\/li>\n<li>VueJS;<\/li>\n<li>isegi Electroni tugi (st juba praegu saame kirjutada lauaarvuti rakendusi \"Electronis\");<\/li>\n<li>ja k\u00f5ige huvitavam \u2013 see on WebGL (saame teha t\u00e4isgraafilisi rakendusi, sealhulgas m\u00e4nge 3D-graafikaga, muusika ja k\u00f5igi h\u00e4id asjadega);<\/li>\n<li>ja v\u00e4ga palju muid sidumisi k\u00f5igi populaarsete javascript-raamistike ja -raamatukogudega.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Raamistik<\/h3>\n<p><\/p>\n<ol>\n<li>On juba loodud spetsiaalselt GopherJS-le veebiraamistik \u2013 Vecty. See on t\u00e4ie\u00f5iguslik React.js analoog, kuid ainult Go-s v\u00e4lja t\u00f6\u00f6tatud, GopherJS-i spetsiifikaga.<\/li>\n<li>On m\u00e4nguraamatud (\u00fcllatavalt!). Leidsin kaks k\u00f5ige populaarsemat:\n<ul>\n<li>Engo;<\/li>\n<li>Ebiten.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>\nDemonstreerin paar n\u00e4idet, kuidas see v\u00e4lja n\u00e4eb ja mida juba praegu Go-s kirjutada saab:<\/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 \/>\nV\u00f5i selline variant (3D-shooterit ei leidnud, kuid ehk see eksisteerib):<\/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>Mida ma pakun?<\/h3>\n<p>\nPraegu on esik\u00fclje t\u00f6\u00f6stus sellises seisus, et sinna t\u00f5ttavad k\u00f5ik keeled, mis varem h\u00e4das olid Javascriptiga. N\u00fc\u00fcd kompileeritakse k\u00f5ik \u201cWeb Assembly\u201d juurde. Mida meil on vaja, et seal v\u00e4\u00e4rikas koht v\u00f5tta kui \u201cgopherid\u201d?<\/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 \/>\nGo on traditsiooniliselt, et see on s\u00fcsteemide programmeerimiskeel ja praktiliselt pole \u00fchtegi teeki kasutajaliidese jaoks. Midagi on olemas, kuid see on osaliselt h\u00fcljatud ja osaliselt mittefunktsionaalne.<\/p>\n<p>Ja siin on hea v\u00f5imalus luua Go-s kasutajaliidese teeke, mis t\u00f6\u00f6tavad GopherJS-il! L\u00f5puks saab kirjutada oma raamistiku! On aeg kirjutada raamistiku, mis on \u00fcks esimesi ja saab varajase kohandamise ning sina oled t\u00e4ht (kui see raamistiku on hea).<\/p>\n<p>Saab kohandada palju erinevaid pakette, mis juba on Go \u00f6kos\u00fcsteemis, brauseri spetsiifika jaoks (n\u00e4iteks mallide mootor). Need t\u00f6\u00f6tavad juba, saab luua mugavaid wrapper'eid, et saaks h\u00f5lpsasti sisu otse brauseris renderdada. Pluss, saa teha n\u00e4iteks teenuse, mis oskab renderdada samu asju serveris ja frontendis, kasutades sama koodi \u2013 just nii, nagu frontendi arendajad armastavad (ainult et n\u00fc\u00fcd Go-s).<\/p>\n<p>Saab kirjutada m\u00e4ngu! Lihtsalt l\u00f5bu p\u00e4rast\u2026<\/p>\n<p>Minu poolt k\u00f5ik.<\/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>K\u00fcsimused<\/h3>\n<p>\n<b>K\u00fcsimus (edasi \u2013 K):<\/b> \u2013 Ma kirjutan Go-s v\u00f5i Js-is?<\/p>\n<p><b>AG:<\/b> \u2013 Sa kirjutad Go gorutine, kanalid, struktuurid, umbrohustamine \u2013 k\u00f5ik\u2026 Sa tellid s\u00fcndmuse, edastad sinna funktsiooni.<\/p>\n<p><b>K:<\/b> \u2013 Kas ma siis kirjutan 'puhtas' Js-is?<\/p>\n<p><b>AG:<\/b> \u2013 Ei, sa kirjutad nagu Go-s ja \u00fchendatud API-ga brauseris (API on samasugune). Sa saad kirjutada oma wrapper'id, et kanalisse tuleksid s\u00f5numid \u2013 see pole keeruline.<\/p>\n<p><b>K:<\/b> \u2013 Kuidas mobiiliga?<\/p>\n<p><b>AG:<\/b> \u2013 Ma olen kindlasti n\u00e4inud: on Cordova jaoks sidumisi, mida Js k\u00e4ivitab. React Native'i kohta ei tea; v\u00f5ib-olla on, aga v\u00f5ib-olla pole (ei huvitanud eriti). M\u00e4ngumootor N-go toetab ka mobiilirakendusi \u2013 nii iOS-i kui Androidi.<\/p>\n<p><b>K:<\/b> \u2013 K\u00fcsimus Web Assembly kohta. Ruumi v\u00f5tab j\u00e4rjest rohkem, vaatamata kompaktimisele, 'zippimisele'\u2026 Kas me tapame niimoodi frontendi maailma veel rohkem?<\/p>\n<p><b>AG:<\/b> \u2013 Web Assembly on binaarvormaat ja binaarne ei saa vaikimisi l\u00f5ppversioonis olla suurem kui tekst\u2026 Sul on meeles runtime, kuid see on sama, mis standardse JavaScripti teegi toomine, kui seda ei ole, seega kasutame mingit Lodashi. Ma ei tea, kui palju Lodash 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 kokkupaneme selle enne saatmist\u2026<\/p>\n<p><b>AG:<\/b> \u2013 Aga see on tekst\u2026 \u00dches\u00f5naga, megabait on nagu palju, aga see on \u2013 k\u00f5ik (sul on kogu runtime). Seej\u00e4rel kirjutad oma \u00e4ri-logika, mis suurendab sinu binaari 1% v\u00f5rra. Seni ei n\u00e4e ma, et see frontendi tapaks. Eriti arvestades, et Web Assembly t\u00f6\u00f6tab kiiremini kui Javascript, ilmselge p\u00f5hjuse t\u00f5ttu \u2013 seda ei pea parsima.<\/p>\n<p><b>K:<\/b> \u2013 Hetkel on see vaieldav punkt\u2026 Veel ei ole mingit standardset elluviimist \u201eVasmast\u201c (Web Assembly), et saaks \u00fcheselt otsustada. Kontseptuaalselt \u2013 jah: me k\u00f5ik m\u00f5istame, et binaar peaks olema kiirem, aga praegune elluviimine, nagu V8, on v\u00e4ga t\u00f5hus.<\/p>\n<p><b>AG:<\/b> \u2013 Jah.<\/p>\n<p><b>K:<\/b> \u2013 Kompileerimine t\u00f6\u00f6tab seal t\u00f5eliselt h\u00e4sti ja pole kindel, et suur eelis tuleb.<\/p>\n<p><b>AG:<\/b> \u2013 Web Assembly'ga tegelevad ka suurte ettev\u00f5tete tegijad.<\/p>\n<p><b>K:<\/b> \u2013 Hetkel tundub, et Web Assembly kohta on veel keeruline otsustada. Juba aastaid on r\u00e4\u00e4gitud, aga reaalseid saavutusi, mida saaks katsuda, on v\u00e4he.<\/p>\n<p><b>AG:<\/b> \u2013 V\u00f5ib-olla. Oleme vaatamas.<\/p>\n<p><b>K:<\/b> \u2013 Meil pole probleeme backendis\u2026 Kas oleks parem j\u00e4tta need probleemid frontendisse? Miks sinna v\u00e4gisi minna?<\/p>\n<p><b>AG:<\/b> \u2013 Peame hoidma frontendi spetsialiste.<\/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=\"M\u00e4ngi 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 huvitavat sisu? Toetage meid, tellides teenuse 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 entry-level 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 jagada serverit \u00f5igesti?<\/a><\/noindex> (saadaval RAID1 ja RAID10 variandid, kuni 24 tuuma ja kuni 40GB DDR4).<\/p>\n<p><b>Dell R730xd on Equinixi Tier IV andmekeskuses Amsterdamis kaks korda odavam?<\/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> Hollandis! <b>Dell R420 \u2014 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB \u2014 alates $99!<\/b><\/b> Lugege sellest <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/329618\/\">Kuidas luua ettev\u00f5tte tasemel infrastruktuuri, kasutades Dell R730xd E5-2650 v4 servereid, mille hind on 9000 eurot, taskukohase hinna eest?<\/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.1.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.1.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\u010dev: Go Frontend | ProHoster","description":"Kyiv Go Meetup mai 2018: Juht: \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}]}}