Security ist ein stets aktuelles Thema in der IT. Deshalb widmet sich das ADMIN-Magazin 04/2012 speziell Sicherheitsaspekten und gibt Antworten auf die Fragen: ... (mehr)

Typen

Aus der steigenden Popularität von Sprachen wie Python und Javascript haben die Go-Entwickler die Lehre gezogen, dass ein einfaches Typsystem die Verbreitung einer Programmiersprache eher fördert. Wie Robert Griesemer es ausdrückt: "Clumsy type systems drive people to dynamically typed languages." Dennoch wollten sie auf die Zuverlässigkeit, die stark typisierte Sprachen bieten, nicht verzichten. Der klassische Kompromiss ist bei Go nun in starker Typisierung mit Typinferenz verwirklicht, das heißt jede Variable hat einen fixen Typ, aber der Programmierer kann darauf verzichten, ihn anzugeben, wenn der Compiler ihn erschließen kann.

Gleichzeitig gibt es aber in Go auch keine strikte Typenhierarchie, weil dies nach Ansicht der Entwickler die Implementierung von Compiler und Tools verkompliziert und zu endlosen Diskussionen über die konkrete Ausformung der Hierarchie führt. Stattdessen bietet Go wichtige Typen wie Arrays und Maps (Hashes) schon im Sprachkern. Pointer gibt es auch, aber eher wie in Pascal, also ohne die C-typische Zeigerarithmetik.

Generische Typen, wie sie von C++, Java und Python bekannt sind, gibt es in Go nicht, wenn auch die Entwickler ihnen einen gewissen Nutzen bescheinigen und für die ferne Zukunft eine Implementierung nicht definitiv ausschließen.

Dennoch lässt es sich in Go objektorientiert programmierern, die Abstraktion hierfür sind die sogenannten Interfaces, die sich aber von Interfaces etwa in Java oder Objective-C unterscheiden. Ein Interface spezifiziert eine Sammlung von Methoden, die "Objekte" implementieren, um damit eine bestimmte Funktion zu erfüllen, ohne dass sie einer gemeinsamen Klasse angehören müssen.

Auch Exceptions gibt es in Go nicht, weil sie zu unkontrollierbaren Änderungen im Programmfluss führen. Als Alternative bietet Go mehrere Rückgabewerte für Funktionen an, die sich über einen Wildcard-Mechanismus zum Auslesen von Fehlerwerten eignen. Listing 1 zeigt in Zeile 2, wie der Aufruf von »os.Create()« gleichzeitig das Datei-Handle und einen Fehlercode zurückgibt.

Listing 1

Error Handling

 

Tools

Wer selbst mit der Go-Programmierung loslegen will, muss meistens erst noch den Compiler installieren, den es aber zumindest auf modernen Linux-Distributionen schon im Paketmanagement-System gib. Auf Ubuntu 12.04 etwa genügt zur Installation »apt-get install golang« . Für alle anderen, einschließlich Mac- und Windows-Benutzer, gibt es Binärdistributionen des Go-Pakets.

Nach der Installation finden sich auf der Festplatte, je nach Prozessorarchitektur, die Befehle »6a« , »6c« , »6g« und »6l« oder analoge Befehle mit den Ziffern 5 oder 8. Die 6er-Tools sind für AMD64, die 5er-Reihe für 368 und die 8er für ARM. Die seltsamen Namen sind ebenfalls ein Erbe von Plan9, das über diese Ziffern die Prozessorarchitekturen identifiziert.

Praktischerweise muss man sich um diese Details in der Praxis nicht kümmern, sondern kann stattdessen einfach das Frontend »go« verwenden. Es sei jedoch noch erwähnt, dass die vom Compiler erzeugten Object-Dateien mit der Endung ».6« Referenzen auf alle verwendeten Module enthält, die der Linker dann verwendet. Damit fällt das Problem weg, dass man zusätzlich zum Einbinden von Header-Dateien auch noch die passenden Libraries finden und beim Linken angeben muss wie von C und C++ bekannt. Wenn sich ein Go-Programm kompilieren lässt, kann der Compiler es auch linken. Die altbekannten Linker-Probleme gehören damit der Vergangenheit an. Auch die Aufgabe von Makefiles übernimmt »go« .

Wer Go richtig installiert hat, sollte auf der Kommandozeile den Go-Befehl ausführen können:

$ go version
go version go1

Wenn die Go-Installation nicht automatisch im »PATH« der ausführbaren Dateien enthalten ist, sollte man die Umgebungsvariable »GOROOT« auf das Elternverzeichnis setzen und dann »$GOROOT/bin« in den »PATH« aufnehmen.

Weil Go-Programme sich wirklich schnell übersetzen lassen, eignen sie sich mit Einschränkungen auch für den Aufruf als Skript, also eine Art selbstgestrickte Just-in-Time-Compilation. Das Tool Gorun unterstützt diesen Prozess [4].

Ähnliche Artikel

comments powered by Disqus

Artikel der Woche

Eigene Registry für Docker-Images

Wer selber Docker-Images herstellt, braucht auch eine eigene Registry. Diese gibt es ebenfalls als Docker-Image, aber nur mit eingeschränkter Funktionalität. Mit einem Auth-Server wird daraus ein brauchbares Repository für Images. (mehr)
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Google+

Ausgabe /2019