{"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 ihr hier seid! Heute haben wir zwei offizielle Sprecher \u2013 Alexej und Wanja. Es werden noch zwei weitere sprechen, wenn wir genug Zeit haben. Der erste Sprecher ist Alexej Gratschjow, der uns \u00fcber GopherJS erz\u00e4hlen wird.<\/p>\n<p><b>Alexej Gratschjow (im Folgenden \u2013 AG):<\/b> \u2013 Ich bin Go-Entwickler und schreibe Web-Services in Go. Manchmal komme ich mit dem Frontend in Ber\u00fchrung, manchmal muss ich da handgreiflich eingreifen. Ich m\u00f6chte \u00fcber meine Erfahrungen und Forschungen zu Go im Frontend berichten.<\/p>\n<p>Die Legende ist folgende: Zuerst sprechen wir dar\u00fcber, warum wir Go im Frontend ausf\u00fchren m\u00f6chten, dann besprechen wir, wie dies m\u00f6glich ist. Es gibt zwei Wege \u2013 Web Assembly und GopherJS. Wir werden uns ansehen, in welchem Zustand sich diese L\u00f6sungen befinden und was man damit machen kann.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Was ist falsch am Frontend?<\/h3>\n<p>\nSind wir uns alle einig, dass am Frontend alles gut 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 \/>\nZu wenig Tests? Lange Build-Zeiten? \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 w\u00e4hrend meiner Arbeit konfrontiert war, und erkl\u00e4ren, wie sie gel\u00f6st werden.<\/p>\n<p>Ein Typsystem kann man in Javascript kaum als solches bezeichnen \u2013 es gibt Strings, die den Typ eines Objekts darstellen, aber das hat tats\u00e4chlich nichts mit Typen zu tun. Dieses Problem wird in TypeScript (einer Erweiterung von Javascript) und Flow (einem statischen Typ-Pr\u00fcfer in Javascript) gel\u00f6st. Tats\u00e4chlich hat das Frontend bereits das Problem eines schlechten Typsystems in Javascript gel\u00f6st.<\/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 gibt es im Browser nicht wirklich \u2013 es gibt einige eingebaute Objekte und \u201emagische\u201c Funktionen in den Browsern. Aber in Javascript als solchem fehlt eine Standardbibliothek. Dieses Problem wurde einmal von jQuery gel\u00f6st (alle verwendeten jQuery mit all seinen Prototypen, Helfern und Funktionen, die f\u00fcr die Arbeit ben\u00f6tigt werden). Heute verwendet jeder 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 \u201eNudeln\u201c aus einem unglaublichen Gewirr von Callbacks aussah. Dieses Problem wurde jetzt gel\u00f6st (mit der Einf\u00fchrung von ES-15 oder ES-16), es wurden Promises in Javascript hinzugef\u00fcgt und alle konnten f\u00fcr eine Zeit wieder leichter atmen.<\/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 die Promises-H\u00f6lle kam\u2026 Ich wei\u00df nicht, wie die Frontend-Industrie es schafft, aber sie treiben sich st\u00e4ndig in seltsame Abgr\u00fcnde. Sie haben sogar in den \u201ePromises\u201c eine H\u00f6lle geschafft. Sp\u00e4ter wurde dieses Problem gel\u00f6st, indem ein neuer Primitiv hinzugef\u00fcgt wurde \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 \/>\nMit der Asynchronit\u00e4t ist das Problem gel\u00f6st. Async\/await ist ein ziemlich beliebtes Konzept in verschiedenen Programmiersprachen. In Python und anderen Sprachen wird dieser Ansatz verwendet - er ist ziemlich gut. Das Problem ist gel\u00f6st.<\/p>\n<p>Welches Problem ist ungel\u00f6st? Die exponentiell steigende Komplexit\u00e4t von Frameworks, die Schwierigkeit des \u00d6kosystems und der eigentlichen Programme.<\/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 seltsam. Wir alle kennen die Schwierigkeiten beim Zusammenf\u00fcgen von Arrays und Objekten und andere Besonderheiten.<\/li>\n<li>Javascript ist multiparadigmatisch. Genau jetzt ist es ein besonders relevantes System, wenn das \u00d6kosystem sehr gro\u00df ist:\n<ul>\n<li>alle schreiben in verschiedenen Stilen \u2013 die einen schreiben strukturiert, die anderen funktional, verschiedene Entwickler schreiben unterschiedlich;<\/li>\n<li>aus verschiedenen Paketen kommen unterschiedliche Paradigmen, wenn Sie verschiedene Pakete verwenden;<\/li>\n<li>es gibt sehr viel \u201aSpa\u00df\u2018 mit funktionaler Programmierung in Javascript \u2013 es ist eine Bibliothek namens rambda erschienen und jetzt kann niemand mehr die in dieser Bibliothek geschriebenen Programme lesen.<\/li>\n<\/ul>\n<p>\n<\/li>\n<li>Das alles hat einen gro\u00dfen Einfluss auf das \u00d6kosystem, und es ist unglaublich gewachsen. Pakete sind untereinander inkompatibel: einige basieren auf Promises, andere auf async\/await, wieder andere auf Callbacks. Au\u00dferdem wird auch in verschiedenen Paradigmen geschrieben!<\/li>\n<li>Das f\u00fchrt dazu, dass das Projekt schwer zu warten ist. Es ist schwierig, einen Bug zu finden, wenn Sie den Code nicht lesen k\u00f6nnen.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Was ist Web Assembly?<\/h3>\n<p>\nDie talentierten Leute von der Mozilla Foundation und mehreren anderen Unternehmen haben so etwas wie Web Assembly erfunden. 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 ist eine im Browser integrierte virtuelle Maschine, die ein bin\u00e4res Format unterst\u00fctzt.<\/li>\n<li>Binarprogramme werden dort ausgef\u00fchrt, praktisch nativ, das hei\u00dft, der Browser muss nicht jedes Mal den gesamten \u201aSatz\u2018 von Javascript-Code parsen.<\/li>\n<li>Alle Browser haben Unterst\u00fctzung zugesagt.<\/li>\n<li>Da es Bytecode ist, kann man einen Compiler f\u00fcr jede Sprache schreiben.<\/li>\n<li>Die vier Hauptbrowser bieten bereits Unterst\u00fctzung f\u00fcr Web Assembly.<\/li>\n<li>Bald erwarten wir native Unterst\u00fctzung in Go. Eine solche neue Architektur ist bereits hinzugef\u00fcgt worden: GOARCH=wasm GOOS=js (bald). Soweit ich verstehe, ist sie derzeit nicht funktional, jedoch gibt es eine Erkl\u00e4rung, dass es auf jeden Fall in Go kommen wird.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Was ist jetzt zu tun? GopherJS<\/h3>\n<p>\nSolange wir keine Unterst\u00fctzung f\u00fcr Web Assembly haben, gibt es 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>Go-Code wird in \u201areines\u2018 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 in allem l\u00e4uft, was auch immer).<\/li>\n<li>Es gibt Unterst\u00fctzung f\u00fcr fast alles, was in Go vorhanden ist, 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, deren Unterst\u00fctzung im Browser keinen Sinn macht: syscall, net-Interaktionen (es gibt einen net\/http-Client, aber keinen Server, und der Client wird \u00fcber XMLHttpRequest emuliert). Insgesamt 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 Paket-\u00d6kosystem in Go, alle Drittanbieter-L\u00f6sungen (Template-Engines usw.) k\u00f6nnen mit GopherJS kompiliert und im Browser ausgef\u00fchrt werden.<\/li>\n<\/ul>\n<p>\nGopherJS zu bekommen ist ganz einfach \u2013 es ist ein normales Go-Paket. Wir machen go get, und wir haben den Befehl GopherJS, um die Anwendung zu bauen:<\/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 \/>\nSo ein kleines Hello World\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\u2026Eine gew\u00f6hnliche Go-Anwendung, ein gew\u00f6hnliches fmt-Paket der Standardbibliothek und Binding Js, um auf die API des Browsers zuzugreifen. Println wird schlie\u00dflich in ein Console Log umgewandelt und der Browser wird \u201eHello gophers!\u201c ausgeben! So einfach: wir machen GopherJS build \u2013 starten im Browser \u2013 alles funktioniert!<\/p>\n<h3>Was ist derzeit verf\u00fcgbar? 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 beliebten 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 Daten;<\/li>\n<li>React.js;<\/li>\n<li>VueJS;<\/li>\n<li>es gibt sogar Unterst\u00fctzung f\u00fcr Electron (d.h. wir k\u00f6nnen bereits jetzt Desktop-Anwendungen mit \u201eElectron\u201c schreiben);<\/li>\n<li>und das Beste \u2013 es ist WebGL (wir k\u00f6nnen vollgrafische Anwendungen erstellen, einschlie\u00dflich Spielen mit 3D-Grafik, Musik und allen Vorz\u00fcgen);<\/li>\n<li>und sehr viele andere Bindings f\u00fcr alle beliebten 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. Dies ist ein vollwertiger Analogon zu React.js, jedoch auf Go entwickelt, mit der Spezifik GopherJS.<\/li>\n<li>Es gibt sogar Spiel-Engines (\u00fcberraschenderweise!). Ich habe zwei der beliebtesten gefunden:\n<ul>\n<li>Engo;<\/li>\n<li>Ebiten.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>\nIch werde 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 so eine Variante (ich habe keinen 3D-Shooter gefunden, aber vielleicht gibt es einen):<\/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>\nAktuell befindet sich die Frontend-Industrie in einem Zustand, wo alle Sprachen, die zuvor \u00fcber JavaScript geklagt haben, dort einstr\u00f6men werden. Jetzt werden alle in \u201eWebAssembly\u201c kompiliert. Was brauchen wir, um dort als \u201eGopher\u201c einen angemessenen Platz 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 \/>\nIn Go geht man traditionell davon aus, dass es sich um eine Systemprogrammiersprache handelt, und es gibt praktisch keine Bibliotheken f\u00fcr die Arbeit mit der Benutzeroberfl\u00e4che. Es gibt etwas, aber es ist halb aufgegeben, halb nicht funktional.<\/p>\n<p>Und hier ist eine gute Gelegenheit, UI-Bibliotheken in Go zu erstellen, die auf GopherJS basieren! Man kann endlich sein eigenes Framework schreiben! Die Zeit ist gekommen, ein Framework zu entwickeln, und es wird eines der ersten sein und fr\u00fche Anpassung erhalten, und Sie werden zum Star (wenn es ein gutes Framework wird).<\/p>\n<p>Man kann eine Vielzahl unterschiedlicher Pakete, die bereits im Go-\u00d6kosystem vorhanden sind, an die spezifische Browserumgebung anpassen (zum Beispiel Template-Engines). Diese funktionieren bereits, man kann praktische Wrapper erstellen, um Inhalte direkt im Browser einfach zu rendern. Au\u00dferdem kann man beispielsweise einen Service entwickeln, der dasselbe sowohl auf dem Server als auch im Frontend rendert, indem er denselben Code verwendet \u2013 ganz so, wie es Frontend-Entwickler gerne haben (aber jetzt in Go).<\/p>\n<p>Man kann ein Spiel schreiben! Nur zum Spa\u00df...<\/p>\n<p>Das ist alles 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\u00e4le, Strukturen, Embedding \u2013 alles... Du abonnierst ein Ereignis und \u00fcbergibst eine Funktion.<\/p>\n<p><b>Frage:<\/b> \u2013 Also schreibe ich in \u201epurem\u201c Js?<\/p>\n<p><b>AG:<\/b> \u2013 Nein, du schreibst gewisserma\u00dfen in Go und verbindest dich mit der API des Browsers (die API hat sich dabei nicht ge\u00e4ndert). Du kannst deine eigenen Wrapper schreiben, damit Nachrichten in den Kanal kommen \u2013 das ist nicht schwer.<\/p>\n<p><b>Frage:<\/b> \u2013 Was ist mit Mobilger\u00e4ten?<\/p>\n<p><b>AG:<\/b> \u2013 Ich habe definitiv gesehen: Es gibt Bindungen f\u00fcr das Cordova-Patch, das Js ausf\u00fchrt. Bei React Native wei\u00df ich nicht; vielleicht gibt es sie, vielleicht nicht (ich habe mich nicht besonders daf\u00fcr interessiert). Die Spiel-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. Der Speicherbedarf w\u00e4chst, trotz der Komprimierung, der \u201eZip-Datei\u201c... Werden wir dadurch die Frontend-Welt nicht noch mehr sch\u00e4digen?<\/p>\n<p><b>AG:<\/b> \u2013 Web Assembly ist ein bin\u00e4res Format, und bin\u00e4r kann standardm\u00e4\u00dfig in der endg\u00fcltigen Version nicht gr\u00f6\u00dfer sein als Text... Du meinst das Runtime-Problem, aber das ist dasselbe, wie wenn du die Standardbibliothek von Javascript einbindest, wenn sie nicht vorhanden ist, weshalb wir irgendein Lodash verwenden. Ich wei\u00df nicht, wie viel Lodash ben\u00f6tigt.<\/p>\n<p><b>Frage:<\/b> \u2013 Deutlich weniger als das Runtime...<\/p>\n<p><b>AG:<\/b> \u2013 In \u201epurem\u201c Javascript?<\/p>\n<p><b>Frage:<\/b> \u2013 Ja. Wir komprimieren es, bevor wir es versenden...<\/p>\n<p><b>AG:<\/b> \u2013 Aber das ist doch ein Text\u2026 Im Allgemeinen sind Megabyte relativ viel, aber das ist alles (du hast deine gesamte Laufzeit). Dann schreibst du deine Gesch\u00e4ftslogik, die dein Binary um 1 % vergr\u00f6\u00dfert. Bisher sehe ich nicht, dass dies das Frontend beeintr\u00e4chtigt. Zumal Web Assembly schneller arbeiten wird als Javascript, aus dem offensichtlichen Grund \u2013 es muss nicht geparst werden.<\/p>\n<p><b>Frage:<\/b> \u2013 Ein noch strittiger Punkt\u2026 Es gibt noch keine definitive Implementierung von \u201eWasma\u201c (Web Assembly), um eindeutig urteilen zu k\u00f6nnen. Konzeptuell \u2013 ja: Wir alle verstehen, dass das Binary 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 dort wirklich sehr gut und es ist nicht sicher, dass es einen gro\u00dfen Vorteil geben wird.<\/p>\n<p><b>AG:<\/b> \u2013 Web Assembly wird auch von gro\u00dfen Unternehmen entwickelt.<\/p>\n<p><b>Frage:<\/b> \u2013 Im Moment erscheint es mir noch schwierig, \u00fcber Web Assembly zu urteilen. Seit Jahren wird dar\u00fcber gesprochen, aber es gibt nur wenige reale Fortschritte, die man anfassen kann.<\/p>\n<p><b>AG:<\/b> \u2013 M\u00f6glicherweise. Wir werden sehen.<\/p>\n<p><b>Frage:<\/b> \u2013 Wir haben keine Probleme im Backend\u2026 Vielleicht sollten wir diese Probleme im Frontend belassen? Warum sollten wir dort eingreifen?<\/p>\n<p><b>AG:<\/b> \u2013 Wir m\u00fcssen ein Team von Frontend-Entwicklern besch\u00e4ftigen.<\/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 Freunden empfehlen, <noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/cloudvps\/nl\">Cloud-VPS f\u00fcr Entwickler ab 4,99 $<\/a><\/noindex>, <b>ein einzigartiges \u00c4quivalent zu Einsteigerservern, das wir f\u00fcr Sie entwickelt haben:<\/b> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/347386\/\">Die ganze Wahrheit \u00fcber VPS (KVM) E5-2697 v3 (6 Kerne) 10GB DDR4 480GB SSD 1Gbps ab 19 $ oder wie man einen Server richtig teilt?<\/a><\/noindex> (es sind Optionen mit RAID1 und RAID10 bis zu 24 Kernen und bis zu 40GB DDR4 verf\u00fcgbar).<\/p>\n<p><b>Dell R730xd ist im Equinix Tier IV Rechenzentrum in Amsterdam doppelt so g\u00fcnstig?<\/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, wie <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/329618\/\">man eine Unternehmensinfrastruktur der Klasse C mit Dell R730xd E5-2650 v4-Servern f\u00fcr 9000 Euro im Preis-Leistungs-Verh\u00e4ltnis 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.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\/de\/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=\"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 Hallo zusammen.","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}]}}