{"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\/de\/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>Moderator:<\/b> \u2013 Hallo zusammen! Vielen Dank, dass Sie hier sind! Heute haben wir zwei offizielle Redner \u2013 Alex und Ivan. Wenn wir Zeit haben, gibt es noch zwei weitere. Unser erster Redner ist Alexey Grachev, der uns \u00fcber GopherJS berichten wird.<\/p>\n<p><b>Alexey Grachev (im Folgenden \u2013 AG):<\/b> \u2013 Ich bin Go-Entwickler und schreibe Webservices in Go. Manchmal muss ich mich mit dem Frontend befassen und da selbst Hand anlegen. Ich m\u00f6chte Ihnen von meinen Erfahrungen und Untersuchungen zur Nutzung von Go im Frontend berichten.<\/p>\n<p>Die Legende ist folgende: Zuerst sprechen wir dar\u00fcber, warum wir Go im Frontend einsetzen m\u00f6chten, danach erl\u00e4utern wir, wie das m\u00f6glich ist. Es gibt zwei Wege \u2013 Web Assembly und GopherJS. Wir schauen uns an, in welchem Zustand sich diese L\u00f6sungen befinden und was man damit tun kann.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Was stimmt nicht mit dem Frontend?<\/h3>\n<p>\nSind wir uns alle einig, dass alles gut mit dem Frontend ist?<\/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 \/>\nWenig Tests? Langsame Builds? \u00d6kosystem? Gut.<\/p>\n<p>Was das Frontend betrifft, gef\u00e4llt mir ein Zitat von einem der Frontend-Entwickler in seinem Buch:<\/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 \/>\nIn Javascript gibt es kein Typsystem. Jetzt werde ich die Probleme benennen, mit denen ich im Laufe meiner Arbeit konfrontiert war, und erkl\u00e4ren, wie man sie l\u00f6st.<\/p>\n<p>Das Typsystem kann man in JavaScript eigentlich nicht als solches bezeichnen \u2013 es gibt Strings, die den Typ eines Objekts anzeigen, aber tats\u00e4chlich haben sie mit Typen nichts zu tun. Dieses Problem wurde in TypeScript (eine Erweiterung von JavaScript) und Flow (einem statischen Typpr\u00fcfer f\u00fcr JavaScript) gel\u00f6st. Tats\u00e4chlich hat das Frontend die Probleme mit dem mangelhaften Typsystem in JavaScript mittlerweile angegangen.<\/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 \/>\nEine Standardbibliothek im Browser gibt es nicht wirklich \u2013 es existieren einige eingebaute Objekte und \"magische\" Funktionen in den Browsern. Aber in Javascript als solches fehlt eine Standardbibliothek. Dieses Problem wurde fr\u00fcher durch jQuery gel\u00f6st (jeder verwendete jQuery mit allen Prototypen, Helpern und Funktionen, die f\u00fcr die Arbeit notwendig sind). Heute verwendet man stattdessen 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\u00f6lle. Ich denke, jeder hat vor etwa 5 Jahren JavaScript-Code gesehen, der wie ein \"Nudelgericht\" aus einem unglaublichen Durcheinander von Callback-Funktionen aussah. Diese Problematik wurde jetzt mit der Einf\u00fchrung von ES-15 oder ES-16 gel\u00f6st, da Promises zu JavaScript hinzugef\u00fcgt wurden, was allen f\u00fcr eine gewisse Zeit das Leben erleichtert hat.<\/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 \/>\nBis jetzt hat Promice hell noch nicht erreicht... Ich wei\u00df nicht, wie es die Frontend-Industrie schafft, aber sie geraten st\u00e4ndig in merkw\u00fcrdige Abgr\u00fcnde. Sie haben es sogar bei \"Promises\" geschafft, die H\u00f6lle zu erschaffen. Dann haben sie beschlossen, dieses Problem zu l\u00f6sen, indem sie einen neuen Primitivtyp \u2013 async\/await \u2013 hinzugef\u00fcgt haben:<\/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 \/>\nMit Asynchronit\u00e4t ist das Problem gel\u00f6st. Async\/await ist ein recht popul\u00e4rer Primitivtyp in verschiedenen Sprachen. In Python und anderen gibt es einen solchen Ansatz \u2013 er funktioniert ziemlich gut. Das Problem ist gel\u00f6st.<\/p>\n<p>Welches Problem bleibt ungel\u00f6st? Die geometrisch wachsende Komplexit\u00e4t von Frameworks, die Komplexit\u00e4t des \u00d6kosystems und der Software selbst.<\/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>Die Syntax von JavaScript ist etwas eigenartig. Wir alle kennen die Probleme beim Zusammenf\u00fcgen von Arrays und Objekten sowie andere Kuriosit\u00e4ten.<\/li>\n<li>JavaScript ist multiparadigmatisch. Dies ist jetzt besonders relevant, da das \u00d6kosystem sehr gro\u00df ist:\n<ul>\n<li>alle schreiben in unterschiedlichen Stilen \u2013 manche schreiben strukturell, andere funktional, verschiedene Entwickler schreiben unterschiedlich;<\/li>\n<li>aus verschiedenen Paketen resultieren unterschiedliche Paradigmen, wenn Sie verschiedene Pakete verwenden;<\/li>\n<li>Es gibt eine Menge an \u201eSpa\u00df\u201c mit funktionaler Programmierung in JavaScript \u2013 es ist eine Bibliothek namens Rambda erschienen und jetzt kann niemand mehr Programme lesen, die mit dieser Bibliothek geschrieben wurden.<\/li>\n<\/ul>\n<p>\n<\/li>\n<li>Das hat einen gro\u00dfen Einfluss auf das \u00d6kosystem und es hat sich unglaublich weiterentwickelt. Die Pakete sind untereinander inkompatibel: manche basieren auf Promises, andere auf async\/await, manche wiederum auf Callbacks. Und sie werden sogar in verschiedenen Paradigmen geschrieben!<\/li>\n<li>Das f\u00fchrt dazu, dass das Projekt schwer zu pflegen ist. Es ist schwierig, einen Bug zu finden, wenn du den Code nicht lesen kannst.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Was ist Web Assembly?<\/h3>\n<p>\nDie tollen Leute von der Mozilla Foundation und mehreren anderen Unternehmen haben etwas erfunden, das Web Assembly genannt wird. Was ist das?<\/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>Es handelt sich um eine im Browser integrierte virtuelle Maschine, die ein bin\u00e4res Format unterst\u00fctzt.<\/li>\n<li>Binares Programm wird dort ausgef\u00fchrt, praktisch nativ, das hei\u00dft, der Browser muss nicht jedes Mal den gesamten \u201eNudeln\u201c-JavaScript-Code parsen.<\/li>\n<li>Alle Browser haben ihre Unterst\u00fctzung angek\u00fcndigt.<\/li>\n<li>Da dies Bytecode ist, kann man einen Compiler f\u00fcr jede Sprache schreiben.<\/li>\n<li>Die vier gro\u00dfen Browser sind bereits mit Unterst\u00fctzung f\u00fcr Web Assembly ausgestattet.<\/li>\n<li>Bald erwarten wir nativ Unterst\u00fctzung in Go. Diese neue Architektur ist bereits hinzugef\u00fcgt: GOARCH=wasm GOOS=js (bald). Soweit ich verstehe, ist sie aktuell nicht funktionsf\u00e4hig, aber es gibt eine Aussage, dass dies definitiv in Go kommen wird.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Was kann ich jetzt tun? GopherJS<\/h3>\n<p>\nAktuell haben wir keine Unterst\u00fctzung f\u00fcr Web Assembly, aber es gibt einen Transpiler namens 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>Code in Go wird in \u201ereines\u201c Javascript transpiliert.<\/li>\n<li>Es l\u00e4uft in allen Browsern \u2013 es gibt keine neuen Funktionen, die nur von modernen Browsern unterst\u00fctzt werden (das ist Vanilla JS, das \u00fcberall l\u00e4uft).<\/li>\n<li>So gut wie alles, was in Go vorhanden ist, wird unterst\u00fctzt, einschlie\u00dflich Goroutinen und Kan\u00e4len\u2026 \u2013 alles, was wir so lieben und kennen.<\/li>\n<li>Fast die gesamte Standardbibliothek wird unterst\u00fctzt, mit Ausnahme der Pakete, die im Browser keinen Sinn machen: syscall, net-Interaktionen (es gibt einen net\/http-Client, aber keinen Server, und der Client wird \u00fcber XMLHttpRequest emuliert). Im Allgemeinen ist die gesamte Standardbibliothek verf\u00fcgbar \u2013 hier ist sie im Browser, hier ist die stdlib Go, die wir lieben.<\/li>\n<li>Das gesamte \u00d6kosystem von Go-Paketen, alle Drittanbieterl\u00f6sungen (Templating usw.) k\u00f6nnen mit GopherJS kompiliert und im Browser ausgef\u00fchrt werden.<\/li>\n<\/ul>\n<p>\nEs ist ganz einfach, GopherJS zu erhalten \u2013 es handelt sich um ein gew\u00f6hnliches Go-Paket. Machen Sie ein \u201ago get\u2018, und Sie haben das GopherJS-Tool, um Ihre Anwendung zu kompilieren:<\/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 \/>\nHier ist ein kleines Hello World...<\/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...Eine normale Go-Anwendung, ein ganz gew\u00f6hnliches fmt-Paket aus der Standardbibliothek und die Binding-Tools, um auf die Browser-API zuzugreifen. Das Println wird schlie\u00dflich in ein Console Log umgewandelt, und der Browser zeigt \u201eHello gophers\u201c an! So einfach: Wir machen GopherJS build \u2013 starten im Browser \u2013 und alles funktioniert!<\/p>\n<h3>Was gibt es bisher? Bindings<\/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 \/>\nEs gibt Bindings f\u00fcr alle g\u00e4ngigen JS-Frameworks:<\/p>\n<ul>\n<li>JQuery;<\/li>\n<li>Angular.js;<\/li>\n<li>D3.js f\u00fcr Diagramme und die Arbeit mit gro\u00dfen Datenmengen;<\/li>\n<li>React.js;<\/li>\n<li>VueJS;<\/li>\n<li>es gibt sogar Unterst\u00fctzung f\u00fcr Electron (das bedeutet, dass wir bereits jetzt Desktop-Anwendungen mit \u201aElectron\u2018 entwickeln k\u00f6nnen);<\/li>\n<li>und das Lustigste \u2013 es ist WebGL (wir k\u00f6nnen photorealistische Anwendungen erstellen, einschlie\u00dflich Spiele mit 3D-Grafik, Musik und allen anderen Extras);<\/li>\n<li>und viele weitere Bindings f\u00fcr alle g\u00e4ngigen JavaScript-Frameworks und -Bibliotheken.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Framework<\/h3>\n<p><\/p>\n<ol>\n<li>Es gibt bereits ein speziell f\u00fcr GopherJS entwickeltes Web-Framework \u2013 Vecty. Es ist ein vollst\u00e4ndiges \u00c4quivalent zu React.js, jedoch auf Go basierend, mit den spezifischen Eigenschaften von GopherJS.<\/li>\n<li>Es gibt sogar Spieles\u00e4cke (\u00fcberraschend!). Ich habe die zwei popul\u00e4rsten gefunden:\n<ul>\n<li>Engo;<\/li>\n<li>Ebiten.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>\nIch m\u00f6chte Ihnen ein paar Beispiele zeigen, wie das aussieht und was man bereits jetzt in Go schreiben kann:<\/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 \/>\nOder eine andere Variante (ich habe keinen 3D-Shooter gefunden, aber vielleicht gibt es ihn):<\/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>Was schlage ich vor?<\/h3>\n<p>\nDie Frontend-Industrie befindet sich derzeit in einem Zustand, in dem alle Programmiersprachen, die zuvor \u00fcber Javascript geklagt haben, nun auf den Markt dr\u00e4ngen. Jetzt werden alle in \u201eWebAssembly\u201c kompiliert. Was brauchen wir, um dort einen angemessenen Platz als \u201eGopher\u201c einzunehmen?<\/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 \/>\nEs hat sich traditionell gezeigt, dass Go eine Systemprogrammiersprache ist und es praktisch keine Bibliotheken f\u00fcr die Arbeit mit UI gibt. Es gibt einige, aber sie sind zur H\u00e4lfte veraltet und zur H\u00e4lfte nicht funktional.<\/p>\n<p>Und jetzt \u2013 eine hervorragende Gelegenheit, UI-Bibliotheken in Go zu entwickeln, die auf GopherJS ausgef\u00fchrt werden! Endlich kann man sein eigenes Framework schreiben! Es ist die Zeit gekommen, ein Framework zu entwickeln, das eines der ersten sein wird, sich fr\u00fch anpassen wird und Sie zur Ber\u00fchmtheit machen kann (wenn es ein gutes Framework ist).<\/p>\n<p>Es lassen sich zahlreiche verschiedene Pakete, die bereits im Go-\u00d6kosystem verf\u00fcgbar sind, an die Besonderheiten des Browsers anpassen (zum Beispiel Template-Engine). Sie funktionieren bereits, zudem kann man n\u00fctzliche Wrapper erstellen, um Inhalte direkt im Browser einfach zu rendern. Au\u00dferdem l\u00e4sst sich beispielsweise ein Service erstellen, der dasselbe sowohl auf dem Server als auch im Frontend rendert, und dabei denselben Code verwendet \u2013 genau so, wie es Frontend-Entwickler m\u00f6gen (nun eben auf Go).<\/p>\n<p>Man k\u00f6nnte ein Spiel schreiben! Just for fun\u2026<\/p>\n<p>Das war's von meiner Seite.<\/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>Fragen<\/h3>\n<p>\n<b>Frage (im Folgenden \u2013 F):<\/b> \u2013 Schreibe ich in Go oder in Js?<\/p>\n<p><b>AG:<\/b> \u2013 Du schreibst in Go-Routinen, Kan\u00e4len, Strukturen, Embedding \u2013 alles... Du abonnierst ein Event, \u00fcbergibst eine Funktion.<\/p>\n<p><b>Frage:<\/b> \u2013 Das hei\u00dft, ich schreibe quasi in \u201ereinem\u201c Js?<\/p>\n<p><b>AG:<\/b> \u2013 Nein, du schreibst gewisserma\u00dfen in Go und greifst auf die Browser-API zu (die API hat sich dabei nicht ver\u00e4ndert). Du kannst deine eigenen Wrapper schreiben, damit Nachrichten in den Kanal gelangen \u2013 das ist ja nicht kompliziert.<\/p>\n<p><b>Frage:<\/b> \u2013 Wie sieht es mit Mobilger\u00e4ten aus?<\/p>\n<p><b>AG:<\/b> \u2013 Ich habe auf jeden Fall gesehen, dass es Bindings f\u00fcr das Cordova-Patch gibt, das Js ausf\u00fchrt. Bei React Native \u2013 ich wei\u00df nicht; vielleicht gibt es welche, vielleicht nicht (darum habe ich mich nicht wirklich gek\u00fcmmert). Die Game-Engine N-go unterst\u00fctzt auch mobile Anwendungen \u2013 sowohl iOS als auch Android.<\/p>\n<p><b>Frage:<\/b> \u2013 Frage zu Web Assembly. Immer mehr Platz wird beansprucht, trotz der Komprimierung, der \"Zip-Datei\"... T\u00f6ten wir dadurch die Welt des Frontends nicht noch mehr?<\/p>\n<p><b>AG:<\/b> \u2013 Web Assembly ist ein bin\u00e4res Format, und bin\u00e4r kann per Default in der endg\u00fcltigen Version nicht mehr sein als Text\u2026 Ihr strebt nach Runtime, aber das ist dasselbe, wie eine Standard-Javascript-Bibliothek anzuziehen, wenn sie nicht vorhanden ist, deshalb verwenden wir etwas wie Lodash. Ich wei\u00df nicht, wie viel Lodash ben\u00f6tigt.<\/p>\n<p><b>Frage:<\/b> \u2013 Offensichtlich weniger als Runtime...<\/p>\n<p><b>AG:<\/b> \u2013 Auf \"purem\" Javascript?<\/p>\n<p><b>Frage:<\/b> \u2013 Ja. Wir komprimieren es, bevor wir es senden...<\/p>\n<p><b>AG:<\/b> \u2013 Aber das ist doch Text... Im Allgemeinen ist ein Megabyte viel, aber das ist alles (du hast deine gesamte Runtime). Dann schreibst du deine Business-Logik, die deinen Binary um 1 % erh\u00f6ht. Bisher sehe ich nicht, dass es das Frontend ruiniert. Au\u00dferdem wird Web Assembly schneller arbeiten als Javascript aus einem offensichtlichen Grund \u2013 es muss nicht geparst werden.<\/p>\n<p><b>Frage:<\/b> \u2013 Das ist derzeit ein strittiger Punkt... Es gibt noch keine definitive Implementierung von \"Wasm\" (Web Assembly), um ein eindeutiges Urteil abgeben zu k\u00f6nnen. Konzeptuell \u2013 ja: Wir alle verstehen, dass bin\u00e4r schneller sein sollte, aber die aktuelle Implementierung von V8 ist sehr effizient.<\/p>\n<p><b>AG:<\/b> \u2013 Ja.<\/p>\n<p><b>Frage:<\/b> \u2013 Die Kompilierung funktioniert wirklich gro\u00dfartig dort, und es ist nicht sicher, dass es einen gro\u00dfen Vorteil geben wird.<\/p>\n<p><b>AG:<\/b> \u2013 Auch gro\u00dfe Unternehmen nutzen Web Assembly.<\/p>\n<p><b>Frage:<\/b> \u2013 Im Moment scheint es mir noch schwierig zu sein, Web Assembly zu beurteilen. Es gibt schon seit Jahren Diskussionen, aber die tats\u00e4chlichen greifbaren Erfolge sind eher sp\u00e4rlich.<\/p>\n<p><b>AG:<\/b> \u2013 Vielleicht. Wir werden sehen.<\/p>\n<p><b>Frage:<\/b> \u2013 Wir haben keine Probleme im Backend... Vielleicht sollten wir diese Probleme im Frontend belassen? Warum dort eingreifen?<\/p>\n<p><b>AG:<\/b> \u2013 Man muss ein Team von Frontend-Entwicklern halten.<\/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=\"Video abspielen\" 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>Ein wenig Werbung \ud83d\ude42<\/h3>\n<p>\nDanke, dass Sie bei uns bleiben. Gefallen Ihnen unsere Artikel? M\u00f6chten Sie mehr interessante Inhalte sehen? Unterst\u00fctzen Sie uns, indem Sie eine Bestellung aufgeben oder uns Ihren Freunden empfehlen. <noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/cloudvps\/nl\">Cloud-VPS f\u00fcr Entwickler ab 4,99 $<\/a><\/noindex>, <b>eine einzigartige Alternative zu Einsteiger-Servern, die wir f\u00fcr Sie entwickelt haben:<\/b> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/347386\/\">Alles \u00fcber VPS (KVM) E5-2697 v3 (6 Kerne) 10GB DDR4 480GB SSD 1Gbps ab 19 $ oder wie man einen Server richtig teilt?<\/a><\/noindex> (Verf\u00fcgbar sind Optionen mit RAID1 und RAID10, bis zu 24 Kerne und bis zu 40GB DDR4).<\/p>\n<p><b>Dell R730xd im Equinix Tier IV Rechenzentrum in Amsterdam zum halben Preis?<\/b> Nur bei uns <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 ab 199 $<\/a><\/noindex> in den Niederlanden! <b>Dell R420 \u2014 2x E5-2430 2.2GHz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB \u2014 ab 99 $!<\/b><\/b> Lesen Sie dar\u00fcber <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/329618\/\">Wie man eine Unternehmenskosten-Infrastruktur mit Dell R730xd E5-2650 v4-Servern f\u00fcr ein paar Euro aufbaut?<\/a><\/noindex><br \/>\n<br \/>Quelle: <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\/de\/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=\"de_DE\" \/>\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\/de\/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 Mai 2018: Moderator: \u2013 Alle.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/aleksej-grachyov-go-frontend","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","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\/de\/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\/de\/wp-json\/wp\/v2\/posts\/71628","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=71628"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/71628\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/71629"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=71628"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=71628"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=71628"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}