Skip to content
Harald Weidner edited this page May 26, 2020 · 2 revisions

Tipps und Tricks zu Go

Eigener Dokumentations-Webserver

Jede Installation des Google Go Compilers enthält einen eigenen Webserver, über den die Dokumentation der Go Syntax und der Standardbibliothek abgerufen werden kann. Er kann mit dem folgenden Kommando gestartet werden:

$ godoc -http=:8000

Anschließend kann der Webserver mit einem Browser unter http://localhost:8000/ erreicht werden.

Drittsoftware installieren

Go erlaubt auf einfache Weise die Installation von Paketen, wenn diese in einem entsprechenden Format angeboten werden. Beispielsweise kann der MySQL Connector, der unter https://github.com/go-sql-driver/mysql angeboten wird, mit dem Kommand

$ go get github.com/go-sql-driver/mysql

herunter geladen werden. Dabei ist zu beachten:

  • Das Paket wird unterhalb von $GOPATH/src installiert, häufig ist das $HOME/go/src.

  • Es wird immer HTTPS verwendet.

  • Die Anbieter verwenden verschiedene Versionsverwaltungssysteme. Die gängigsten sind Git, Mercurial und Bazaar. Die entsprechenden Clients müssen installiert sein. Bei Debian wheezy sind das die Pakete git, mercurial und bzr.

  • Auf Systemen, die keinen direkten Zugang zum Internet haben, muss die Environment-Variable https_proxy gesetzt sein, z.B. mit

     $ export https_proxy=http://proxy.doma.in:3128/
    
  • Um die Software zu compilieren und unter $GOPATH/pkg zu installieren, wird go install verwendet.

Importliste automatisch aktualisieren

Goimports ist ein Ersatz für gofmt. Neben der Formatierung des Quelltextes gemäß Coding Style kann es die Liste der importierten Module automatisch aktualisieren, d.h. benötigte Module hinzufügen und nicht genutzte entfernen.

Testabdeckung bestimmen

Seit Version 1.2 kann go test nicht nur automatische Tests durchführen und die Fehlermeldungen anzeigen, sondern mit der Option -cover auch die Testabdeckung bestimmen. Das ist eine Prozentzahl, die angibt, welcher Anteil des Codes beim Testen tatsächlich ausgeführt wurde. Die Ergebnisse lassen sich in einer Datei speichern und auswerten. Besonders schön ist hierbei die Ausgabe in HTML.

$ go test -cover -coverprofile=out
$ go tool cover -html=out

Das erste Kommando führt die Tests durch und speichert das Abdeckungsprofil in der Datei out. Das zweite Kommando generiert daraus eine HTML Ansicht des Sourcecodes, bei der abgedeckte Zeilen grün und nicht abgedeckte rot dargestellt werden, und öffnet den Default-Browser zur Anzeige (oder stellt die Anzeige in einem neuen Tab des laufenden Browsers dar).

Versionsinformationen von außen injizieren

Der Go Linker ermöglicht es, den Inhalt globaler Variablen zur Compile- (bzw. Link-) Time zu überschreiben. Beispielsweise kann man das folgende Programm die beim Build eingespeisten Informationen ausgeben:

package main

import "fmt"

var (
    Version = "(undefined)"
    Author = "(undefined)"
    Date = "(undefined)"
)

func main() {
    fmt.Println("Version:", Version)
    fmt.Println("Autor:", Author)
    fmt.Println("Datum:", Date)
}

Wird das Programm einfach nur mit go build gebaut, ist die Ausgabe:

Version: (undefined)
Autor: (undefined)
Datum: (undefined)

In den Linker Flags kann man die zu überschreibenden String angeben:

$ go build -ldflags "-X main.Version=1.0 -X main.Author=gopher -X main.Date=2020-01-28"

Die Ausgabe ist dann

Version: 1.0
Autor: gopher
Datum: 2020-01-28

In realen Projekten ist es hilfreich, die Informationen automatisch zu beziehen, z.B.

$ go build -ldflags "-X main.Version=$(git describe --tags) -X main.Author=$(id -un) -X main.Date=$(date -Iseconds)"

Beispielausgabe:

Version: v1.0
Autor: gopher
Datum: 2020-01-28T19:22:33+01:00