Prof. Dr. Detlef Stern

Go

Seit einiger Zeit beobachte ich, dass ich in meinem Kontext immer mehr (Open Source-) Software einsetze, die mit Hilfe der Programmiersprache Go realisiert ist:

  • restic ist ein sehr angenehmes Werkzeug zur Datensicherung,
  • mit Gitea hoste ich meine privaten Git-repositories,
  • fzf erlaubt es mir, auf der Kommandozeile schnell Dateien auszuwählen,
  • Hugo generiert mir die Webseiten für https://agiles-studieren.de (und vermutlich bald auch für diese Seiten),
  • Caddy liefert meine internen Webseiten aus,
  • Traefik nutze ich für meine eigene Cloud,
  • Docker ist eine nette "Verpackungstechnologie" für skalierbare Web-Anwendungen, die ich auch in der Lehre einsetze.

Dieser Software ist die recht einfache Installation, Administration und Benutzbarkeit gemein. (Gut, bis auf Docker …).

Als Programmiersprache habe ich bisher immer einen Bogen um Go gemacht. Sie war mir zum einen für meine Bedürfnisse zu systemnah (ja, alle Software auf obiger Liste kann man "systemnah" bezeichnen) und zum anderen bot sie mir zu wenig konzeptionell neues. Natürlich freue ich mich über die Verwendung von CSP zur Realisierung der Nebenläufigkeit. Während meines Studiums habe ich dazu einiges "studiert" und implementiert. Aber was Nebenläufigkeit, Parallelität und Fehlertoleranz angeht, sind Sprachen, wie Erlang bzw. Elixir viel weiter. Außerdem liegt mir die C-artige Syntax weniger (wenn schon C, dann auch richtig).

Ausprobieren werde ich Go wegen anderer Fähigkeiten, weniger der Sprache, als der konkreten Implementierung. Der Standard-Go-Übersetzer erstellt direkt ausführbare Programme, ohne weitere Abhängigkeiten und für andere Zielsysteme.

Diese Programme sind nicht von externer, dynamisch (nach)- geladener Software abhängig, sondern können durch ganz normales Kopieren einfachst installiert werden. Dies ist ein großer Unterschied zu den üblichen Sprachimplementierungen von Python, Java, JavaScript, Erlang & Co. Bei anderen Sprachen ist es häufig nicht möglich, ein unter Ubuntu erstelltes Programm unter Fedora auszuführen, obwohl beides Linux-Distributionen sind.

Darüber hinaus soll es mit dem Standard-Go-Übersetzer möglich sein, unter Linux ein Programm zu realisieren, dass später unter Windows oder unter macOs ablaufen soll, oder auf dem Raspberry Pi (der eine ganz andere Prozessorarchitektur besitzt).

Ausprobieren werde ich Go mit zwei Beispielprogrammen, die für mich nützlich sind:

  1. ein einfacher Web-Server für Authentifizierungsanfragen via Basic Authentication: für den Testbetrieb mancher Software, die einen Authentifizierungsdienst benötigt. (Update 2019-08-30: ist erfolgt)
  2. einen Webmention-Endpunkt: ein zentrales Element meiner IndieWeb-Implementierung.

Beide sind systemnäher als meine übliche Software und für beide benötige ich eine einfache Installation auf unterschiedlichen Systemen. Genug Motivation also.

P.S. Ja, ich sehe den einen Absolventen lächeln, den mit den fehlenden Vokalen im Namen …