Hallo Go! back to frontpage

Seit ein paar Wochen beschäftige ich mich intensiv mit Go (golang), der von Google initiierten Programmiersprache. Sie stellt für mich eine ernsthafte Alternative zu meiner bisherigen Lieblingssprache Python dar, nicht zuletzt wegen folgender Punkte:

  • Go-Projekte werden kompiliert (das jedoch verdammt schnell!)
  • Go bringt ein tolles Toolset mit, das das Kompilieren und Testen eigener Projekte und Nutzen von Drittbibliotheken so einfach macht, als würde man eine Skriptsprache benutzen (go run foo.go kompiliert und startet das eigene Programm, zum Beispiel)
  • Go ist static-typed und sehr streng in Bezug auf sauberen Code (es sind bspw. keine unbenutzten Variablen erlaubt)
  • Go hat eine einfache, aber konsequent umgesetzte Syntax
  • Go ist garbage-collected
  • Go bringt (ähnlich wie Python, jedoch noch nicht so umfangreich) eine umfangreiche Standardbilbiothek mit (Image-processing, Netzwerk (SMTP, HTTP, HTTP-Templates, usw), Crypto, RPC, etc.)
  • Go ist ausgelegt auf concurrency/parallelism und bringt leichtgewichtige sogenannte Goroutines mit (entspricht jedoch nicht einem schwergewichtigen Thread oder gar Prozess! Es ist gewollt, dass man - zum Beispiel im Falle einer Netzwerkanwendung - je Connection eine Goroutine startet zwecks Bearbeitung; die Go runtime verteilt automatisch die Goroutines auf Threads/Prozesse). Es können problemlos tausende oder hunderttausende Goroutines gestartet werden.
  • Go-Projekte werden standardmäßig statisch kompiliert/gelinkt (keine Abhängigkeiten zu anderen Bibliotheken usw!)

Die genannten Argumente sind die wichtigsten, die mir gerade eingefallen sind. Worum es mir jedoch in diesem Blogpost eigentlich gehen sollte, ist cross-compiling. Go macht es einem besonders einfach, sein Programm für diverse Plattformen (amd64, 386, arm) und Betriebssysteme (Linux, Windows, Mac, uvm.) zu kompilieren.

Die Standard-Packages aus dem Ubuntu-Repository sind für cross-compiling nicht vorbereitet (die runtimes bspw. sind nicht für andere Zielplattformen kompiliert). Hier wird es notwendig, sich Go selber zu kompilieren (was jedoch nur wenige Minuten dauert und praktisch problemlos verläuft). Man kann sich hierfür an die wunderbare Anleitung von golang.org halten. Nachdem man Go kompiliert hat, lassen sich weitere Plattformen für’s cross-compiling wie folgt vorbereiten (Beispiel für Ziel Windows und 386 von einem Linux aus; auszuführen in Gos src/-Verzeichnis ):

$ GOOS=windows GOARCH=386 CGO_ENABLED=0 ./make.bash --no-clean

Wenige Sekunden später ist die eigene Distribution für Windows/386 vorbereitet und das eigene Projekt kann wie folgt hierfür kompiliert werden (auszuführen im eigenen src/-Projektverzeichnis):

$ GOOS=windows GOARCH=386 go build

Fertig! :)

Simples Programm für Windows kompiliert

Es wird sicher nicht der letzte Blogpost über Go gewesen sein, den ich veröffentliche. Ich bin derzeit viel am Lernen und bin andauernd auf ein Neues über die Möglichkeiten von Go begeistert.


New comment

Comments are moderated and therefore are not published instantly.





Comments

No comments yet. Be the first! :-)