Die Programmiersprache Go (nicht zu verwechseln mit „Go!“) ist eine der neueren Sprachen auf dem Markt, die erst im November 2009 für die Öffentlichkeit freigegeben und dann im Mai 2010 von Rob „Commander“ Pike als zur Produktion geeignet deklariert wurde. Dennoch hat sich Go bereits außergewöhnlich schnell verbreitet, was auch auf die Unterstützung durch Google, die Berühmtheit seiner Entwickler von Google (Robert Griesemer, Rob Pike und Ken Thompson) oder seine besondere Coolness zurückzuführen sein dürfte.
Bei Go ist Nebenläufigkeit fest in der Sprache verankert, in Form vom Goroutines, die von der Konzeption her Threads ähneln. Allerdings verwaltet die Sprache deren Mapping zu realen Threads (oder auch nicht) im Hintergrund. Die Syntax für das Erstellen von Goroutines ist bemerkenswert einfach, und Go bietet einen speziellen Datentyp, der als Channels bezeichnet wird, um die Kommunikation zwischen den Goroutines zu erleichtern (sowie zwischen Goroutines und dem Hauptthread). Ein Webserver stellt einen Anwendungsfall für diese Art von Parallelität dar: Eine separate Goroutine kann jede einzelne Webanfrage handhaben.
Go ist genau wie C als Systemsprache konzipiert. Seine Syntax ähnelt der von C, weist jedoch zahlreiche Vereinfachungen und Verbesserungen auf. Die vorteilhafteste Ähnlichkeit zu C liegt aber in seiner Performance. Go ist eine kompilierte Sprache und kann dadurch sicherlich mit gesteigertem Traffic besser fertig werden als interpretierte Alternativen wie Ruby, Python und PHP. Auf der anderen Seite bedeutet dies, dass bei jeder Codeänderung die Komponenten des verwendeten Webservers neu kompiliert und verlinkt werden müssen. Das ist ein klarer Nachteil.
Ebenso wie C verfügt Go über Pointer – allerdings ist in Go die Wahrscheinlichkeit viel geringer, dass sich ein Pointer als Fußangel erweist. Go bietet eine automatische Speicherbereinigung, anstatt dem Programmierer oder einer Klassenimplementierung wie intelligenten Pointern ihre Aufhebung zu überlassen. Go verbietet Typecasting und Pointerarithmetik.
Obwohl Go eine starke statische Typsicherheit bietet, ermöglicht es dennoch eine dynamische Typisierung über Schnittstellen. Die Go-Schnittstellen ähneln insofern denen von Java, als dass beide eine Mindestmenge von Methoden festlegen, die bei der Implementierung einer Schnittstelle bereitgestellt werden müssen. Die Implementierung von Go ist allerdings viel flüssiger. So lässt sich zum Beispiel ein Parameter als Schnittstelle ohne Methoden deklarieren, so dass man dann alles weitergeben kann. Jeder Typ, der die Methoden einer Schnittstelle einbindet, implementiert implizit auch die Schnittstelle, ohne dies angeben zu müssen. Daher ähneln Go-Schnittstellen eher losen Duck-Typing-Listen. Anders als beim Duck-Typing in Late-Binding-Sprachen wie Python und Ruby werden die Implementierungsanforderungen in Go vom Compiler geprüft.
Go verfügt bereits über eine aktive und hilfreiche Community. In der Google-Gruppe golang-nuts erhält man meist umgehend Antwort von Personen, die intensiv an dem Projekt mitarbeiten, wie Russ Cox oder Commander Pike selbst.
Beim Erstellen des eigenen Webservers bieten sich mindestens drei Möglichkeiten an:
Alle drei Optionen unterstützen den Ansatz der Registrierung von Handlern für den Abgleich eingehender URIs und anschließenden Aufruf einer Server.Run-Methode zur Verteilung der Anfragen. Web.Go bietet eine explizite Unterstützung für Shared Hosting über SCGI oder FastCGI.
Für das Templating bietet Go ein eigenes Template-Paket. Es steht auch eine Version der beliebten Template-Engine Mustache für Templates ohne Logik zur Verfügung. Twister enthält Beispiele für die Verwendung des Template-Pakets mit als HTML-Seiten organisierten Templates, ähnlich wie bei eRuby oder PHP. Web.Go empfiehlt stattdessen die Verwendung von Mustache, da es rekursives Templating ermöglicht.
Was wäre eine Web-Anwendung ohne eine Datenbank? Die Arbeiten an Go Bindings für viele gängige Datenbanken schreiten fort, darunter MySQL, PostgreSQL, SQLite3 und sogar ODBC (sofern gewünscht). Als dieser Beitrag verfasst wurde, schienen die SQLite3 Bindings am weitesten ausgereift, vor allem die des Unterprojekts von Eleanor McHugh.
Wann wird Go für die Verwendung auf Websites bereit sein? Die Go-Sprache und dazugehörigen Pakete befinden sich noch immer in Entwicklung. Wer also nicht gerade Lust auf Experimente hat, sollte besser nicht zu viel Aufwand in eine Arbeit stecken, die vielleicht schon bald veraltet sein wird. Auf der anderen Seite sieht es so aus, als ob Go genau den richtigen Mittelweg zwischen leistungsfähiger Parallelität und einfacher Programmierung, sicherer dynamischer Typisierung, Einfachheit und Optionsvielfalt gefunden hat. Es könnte sich schneller als erwartet als nützlich erweisen.
Bösartige QR-Codes, die per E-Mail versendet werden, eignen sich sehr gut, um Spam-Filter zu umgehen.
Unsichere Websites und Phishing-Mails in Verbindung mit Black Friday können kauffreudigen Konsumenten zum Verhängnis werden.
Malware SmokeLoader wird weiterhin von Bedrohungsakteuren genutzt, um Payloads über neue C2-Infrastrukturen zu verbreiten.
Bankhaus Metzler und Telekom-Tochter MMS testen, inwieweit Bitcoin-Miner das deutsche Stromnetz stabilisieren könnten.
Mit 1,7 Exaflops ist El Capitan nun der dritte Exascale-Supercomputer weltweit. Deutschland stellt erneut den…
Der deutsche Hyperscaler erweitert sein Server-Portfolio um vier Angebote mit den neuen AMD EPYC 4004…