# go — Das Kommandozeilen-Werkzeug für Go

> Praxis-Guide zur go-Toolchain: build, run, test und mod für Module, Workspaces, Cross-Compiling und Formatierung.

Source: https://www.jpkc.com/db/cheatsheets/build-languages/go/

<!-- PROSE:intro -->
`go` ist das eine Kommandozeilen-Werkzeug, das die komplette Go-Toolchain bündelt: Du kompilierst und startest Programme mit `go run` und `go build`, führst Tests und Benchmarks mit `go test` aus und verwaltest deine Abhängigkeiten über Go-Module (`go mod`). Statt eines separaten Build-Systems oder Paketmanagers steckt alles in diesem einen Binary – inklusive Formatierung, statischer Analyse, Code-Generierung und Profiling. Dieser Guide führt dich durch die wichtigsten Befehle für den Alltag, vom ersten `go run main.go` bis zum Cross-Compiling und zur Modul-Pflege.
<!-- PROSE:intro:end -->

## Bauen & Ausführen

`go run <file>` — Kompiliert ein Go-Programm und führt es aus.

```bash
go run main.go
```

`go run .` — Kompiliert das aktuelle Paket und führt es aus.

```bash
go run .
```

`go build` — Kompiliert das aktuelle Paket.

```bash
go build
```

`go build -o <name>` — Kompiliert mit eigenem Namen für die Ausgabe-Binary.

```bash
go build -o myapp
```

`GOOS=<os> GOARCH=<arch> go build` — Cross-Compiling für ein anderes Betriebssystem bzw. eine andere Architektur.

```bash
GOOS=linux GOARCH=amd64 go build -o myapp-linux
```

`go install` — Kompiliert die Binary und installiert sie nach $GOPATH/bin.

```bash
go install
```

## Module

`go mod init <module>` — Initialisiert ein neues Go-Modul.

```bash
go mod init github.com/user/myapp
```

`go mod tidy` — Ergänzt fehlende und entfernt nicht genutzte Abhängigkeiten.

```bash
go mod tidy
```

`go get <package>` — Fügt eine Abhängigkeit hinzu oder aktualisiert sie.

```bash
go get github.com/gin-gonic/gin@latest
```

`go get <package>@<version>` — Holt eine bestimmte Version einer Abhängigkeit.

```bash
go get github.com/gin-gonic/gin@v1.9.1
```

`go mod download` — Lädt alle Abhängigkeiten in den lokalen Cache.

```bash
go mod download
```

`go mod vendor` — Kopiert die Abhängigkeiten in ein vendor-Verzeichnis.

```bash
go mod vendor
```

`go mod graph` — Gibt den Abhängigkeitsgraphen des Moduls aus.

```bash
go mod graph
```

## Tests

`go test` — Führt die Tests im aktuellen Paket aus.

```bash
go test
```

`go test ./...` — Führt die Tests aller Pakete rekursiv aus.

```bash
go test ./...
```

`go test -v` — Führt die Tests mit ausführlicher Ausgabe aus.

```bash
go test -v
```

`go test -run <regex>` — Führt nur die Tests aus, die auf ein Muster passen.

```bash
go test -run TestParse
```

`go test -cover` — Zeigt die Testabdeckung in Prozent.

```bash
go test -cover ./...
```

`go test -coverprofile=cover.out` — Erzeugt ein Abdeckungsprofil.

```bash
go test -coverprofile=cover.out && go tool cover -html=cover.out
```

`go test -bench .` — Führt Benchmarks aus.

```bash
go test -bench . -benchmem
```

## Formatieren & Linten

`go fmt ./...` — Formatiert alle Go-Quelldateien.

```bash
go fmt ./...
```

`gofmt -d <file>` — Zeigt das Formatierungs-Diff an, ohne Änderungen zu schreiben.

```bash
gofmt -d main.go
```

`go vet ./...` — Führt eine statische Analyse aus, um mögliche Fehler zu finden.

```bash
go vet ./...
```

`go generate ./...` — Führt go:generate-Direktiven in den Quelldateien aus.

```bash
go generate ./...
```

## Werkzeuge & Umgebung

`go env` — Zeigt alle Go-Umgebungsvariablen.

```bash
go env
```

`go env GOPATH` — Zeigt eine bestimmte Umgebungsvariable.

```bash
go env GOROOT
```

`go env -w <KEY>=<value>` — Setzt eine Go-Umgebungsvariable dauerhaft.

```bash
go env -w GOPROXY=direct
```

`go version` — Zeigt die installierte Go-Version.

```bash
go version
```

`go doc <package>` — Zeigt die Dokumentation zu einem Paket oder Symbol.

```bash
go doc fmt.Println
```

`go tool pprof <profile>` — Analysiert ein CPU- oder Speicher-Profil.

```bash
go tool pprof cpu.prof
```

<!-- PROSE:outro -->
## Fazit

`go` vereint Compiler, Test-Runner, Paketmanager und Formatierer in einem einzigen, schnell zu lernenden Werkzeug – genau das macht den Go-Alltag so reibungslos. Hältst du dich an die Modul-Befehle (`go mod init`, `go mod tidy`), bleibt dein Abhängigkeitsbaum sauber und reproduzierbar. Ein Wort zur Vorsicht: `go install` und `go get` laden, kompilieren und führen fremden Code samt etwaiger Build-Schritte aus – ziehe nur Module, denen du vertraust, und verlasse dich auf die Schutzschicht von `GOPROXY` und `GOSUMDB`, die Versionen prüft und gegen unbemerkte Manipulation absichert. Bei seltsamen Build-Fehlern hilft oft ein sauberer Cache per `go clean -cache`.

## Weiterführende Links

- [go.dev/doc](https://go.dev/doc/) – offizielle Dokumentation zu Sprache, Toolchain und Modulen (englisch)
- [Go Modules Reference](https://go.dev/ref/mod) – Referenz zu Modulen, Versionierung, `GOPROXY` und `GOSUMDB` (englisch)
<!-- PROSE:outro:end -->

## Verwandte Kommandos

- [artisan](https://www.jpkc.com/db/cheatsheets/build-languages/artisan/) – Kommandozeilen-Werkzeug des Laravel-PHP-Frameworks
- [cargo](https://www.jpkc.com/db/cheatsheets/build-languages/cargo/) – Build-Werkzeug und Paketmanager für Rust
- [composer](https://www.jpkc.com/db/cheatsheets/build-languages/composer/) – Abhängigkeitsverwaltung für PHP

