Compiler für Go

Gc

Gc ist der offizielle Compiler von Google. Er wurde in C geschrieben und erzeugt statische Binaries. Derzeit werden nur die Architekturen i386, amd64 und ARM (armel und armhf) und auf Intel-Prozessoren die Betriebssysteme Linux, FreeBSD, Windows und MacOS unterstützt.

Die jeweils aktuelle Version des Compiler kann hier herunter geladen werden. Für Debian Wheezy ist er als Paket golang verfügbar.

Ein Go-Programm kann mit Gc direkt ausgeführt oder compiliert werden. Bei der direkten Ausführung wird es zunächst unterhalb von /tmp compiliert und dann ausgeführt.

$ go run hello.go

$ go build hello.go
$ ./hello

Seit Go 1.5 ist der Compiler vollständig in Go (und kleinen Teilen in Assembler) geschrieben. Im Compiler und der Runtime gibt es keinen C-Code mehr. Ein C-Compiler wird nur noch benötigt, wenn man Software compilieren möchte, die CGO verwendet.

GccGo

GccGo ist ein Compiler auf Basis der GNU Compiler Collection. Das dazugehörige Debian-Paket ist gccgo. Es werden alle offiziellen Architekturen in Debian Wheezy unterstützt.

$ gccgo -Wall -O2 -s -o hello hello.go
$ ./hello

GccGo erzeugt dynamisch gelinkte Binaries. Sie sind üblicherweise gegen die folgenden Bibliotheken gelinkt:

$ ldd hello
    linux-vdso.so.1 =>  (0x00007fffb31ff000)
    libgo.so.0 => /usr/lib/x86_64-linux-gnu/libgo.so.0 (0x00007fa704c26000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fa7049a4000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fa70478d000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa704403000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fa707938000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fa7041e7000)

Weitere Compiler

Neben den beiden oben genannten Compilern gibt es weitere Implementierungen von Go.