{"meta":{"title":"Erstellen und Testen von Go","intro":"Hier erfährst, du, wie du einen CI-Workflow (Continuous Integration) erstellst, um dein Go-Projekt zu erstellen und zu testen.","product":"GitHub Actions","breadcrumbs":[{"href":"/de/actions","title":"GitHub Actions"},{"href":"/de/actions/tutorials","title":"Anleitungen"},{"href":"/de/actions/tutorials/build-and-test-code","title":"Erstellen und Testen von Code"},{"href":"/de/actions/tutorials/build-and-test-code/go","title":"Go"}],"documentType":"article"},"body":"# Erstellen und Testen von Go\n\nHier erfährst, du, wie du einen CI-Workflow (Continuous Integration) erstellst, um dein Go-Projekt zu erstellen und zu testen.\n\n## Einführung\n\nIn dieser Anleitung erfährst du, wie du ein Go-Paket erstellst, testest und veröffentlichst.\n\nGitHub gehostete Runner verfügen über einen Tools-Cache mit vorinstallierter Software, der auch die Abhängigkeiten für Go enthält. Eine vollständige Liste der aktuellen Software und der vorinstallierten Versionen von Go findest du unter [Von GitHub gehostete Runner](/de/actions/concepts/runners/github-hosted-runners#preinstalled-software-for-github-owned-images).\n\n## Voraussetzungen\n\nSie sollten bereits mit der YAML-Syntax und damit vertraut sein, wie sie mit GitHub Actions verwendet wird. Weitere Informationen finden Sie unter [Workflowsyntax für GitHub Actions](/de/actions/reference/workflows-and-actions/workflow-syntax).\n\nDu solltest über grundlegende Kenntnisse in Bezug auf die Go-Programmiersprache verfügen. Weitere Informationen findest du unter [Erste Schritte mit Go](https://golang.org/doc/tutorial/getting-started).\n\n## Verwenden einer Go-Workflowvorlage\n\nFügen Sie für einen schnellen Einstieg dem Verzeichnis `.github/workflows` Ihres Repositorys eine Workflowvorlage hinzu.\n\nGitHub stellt eine Go-Workflowvorlage bereit, die für die meisten Go-Projekte funktionieren sollte. In den nachfolgenden Abschnitten dieser Anleitung finden Sie Beispiele dafür, wie diese Workflowvorlage angepasst werden kann.\n\n1. Navigieren Sie auf GitHub zur Hauptseite des Repositorys.\n\n2. Klicke unter dem Repositorynamen auf **<svg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-play\" aria-label=\"play\" role=\"img\"><path d=\"M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z\"></path></svg> Actions**.\n\n   ![Screenshot: Registerkarten für das Repository „github/docs“. Die Registerkarte „Aktionen“ ist mit einem orangefarbenen Rahmen hervorgehoben.](/assets/images/help/repository/actions-tab-global-nav-update.png)\n\n3. Wenn du bereits über einen Workflow im Repository verfügst, klicke auf **Neuer Workflow**.\n\n4. Auf der Seite „Workflow auswählen“ wird eine Auswahl empfohlener Workflowvorlagen angezeigt. Suchen Sie nach „go“.\n\n5. Filtern Sie die Auswahl von Workflows, indem Sie auf **Continuous Integration** klicken.\n\n6. Klicken Sie im Workflow \"Go - by GitHub Actions\" auf **Konfigurieren**.\n\n   ![Screenshot: Seite „Einen Workflow auswählen“ Die Schaltfläche „Konfigurieren“ im Workflow „Go“ ist mit einem orangefarbenen Umriss hervorgehoben.](/assets/images/help/actions/starter-workflow-go.png)\n\n7. Bearbeiten Sie den Workflow nach Bedarf. Ändern Sie zum Beispiel die Version von Go.\n\n8. Klicke auf **Änderungen übernehmen**.\n\n   Die `go.yml` Workflowdatei wird dem `.github/workflows` Verzeichnis Ihres Repositorys hinzugefügt.\n\n## Angeben einer Go-Version\n\nAm einfachsten lässt sich eine Go-Version angeben, indem Sie die von `setup-go` bereitgestellte GitHub-Aktion verwenden. Weitere Informationen findest du unter der [`setup-go`-Aktion](https://github.com/actions/setup-go/).\n\nUm eine vorinstallierte Version von Go auf einem von GitHub gehosteten Runner zu verwenden, übergeben Sie die entsprechende Version an die Eigenschaft `go-version` der Aktion `setup-go`. Mit dieser Aktion wird im Toolcache der jeweiligen Runner nach einer bestimmten Version von Go gesucht, und die erforderlichen Binärdateien werden zu `PATH` hinzugefügt. Diese Änderungen bleiben für den Rest des Auftrags beibehalten.\n\nDie `setup-go` Aktion ist die empfohlene Methode der Verwendung von Go mit GitHub Actions, da sie hilft, ein konsistentes Verhalten für verschiedene Läufer und verschiedene Versionen von Go sicherzustellen. Wenn du einen selbstgehosteten Runner verwendest, musst du Go installieren und zu `PATH` hinzufügen.\n\n### Verwenden mehrerer Versionen von Go\n\n```yaml copy\nname: Go\n\non: [push]\n\njobs:\n  build:\n\n    runs-on: ubuntu-latest\n    strategy:\n      matrix:\n        go-version: [ '1.19', '1.20', '1.21.x' ]\n\n    steps:\n      - uses: actions/checkout@v6\n      - name: Setup Go ${{ matrix.go-version }}\n        uses: actions/setup-go@v5\n        with:\n          go-version: ${{ matrix.go-version }}\n      # You can test your matrix by printing the current Go version\n      - name: Display Go version\n        run: go version\n```\n\n### Verwenden einer bestimmten Version von Go\n\nDu kannst einen Auftrag so konfigurieren, dass eine bestimmte Version von Go verwendet wird, z. B. `1.20.8`. Alternativ kannst du auch Syntax für semantische Versionierung verwenden, um die neuste Nebenversion abzurufen. In diesem Beispiel wird das neueste Patchrelease von Go 1.21 verwendet:\n\n```yaml copy\n      - name: Setup Go 1.21.x\n        uses: actions/setup-go@v5\n        with:\n          # Semantic version range syntax or exact version of Go\n          go-version: '1.21.x'\n```\n\n## Installieren von Abhängigkeiten\n\nDu kannst `go get` zum Installieren von Abhängigkeiten verwenden:\n\n```yaml copy\n    steps:\n      - uses: actions/checkout@v6\n      - name: Setup Go\n        uses: actions/setup-go@v5\n        with:\n          go-version: '1.21.x'\n      - name: Install dependencies\n        run: |\n          go get .\n          go get example.com/octo-examplemodule\n          go get example.com/octo-examplemodule@v1.3.4\n```\n\n### Abhängigkeiten „cachen“ (zwischenspeichern)\n\nDu kannst Abhängigkeiten mithilfe der [Aktion `setup-go`](https://github.com/actions/setup-go) zwischenspeichern und wiederherstellen. Bei Verwendung der `setup-go`-Aktion ist das Zwischenspeichern standardmäßig aktiviert.\n\nDie `setup-go`-Aktion sucht nach der Abhängigkeitsdatei `go.sum` im Repositorystamm und verwendet den Hash der Abhängigkeitsdatei als Teil des Cacheschlüssels.\n\nDu kannst den `cache-dependency-path`-Parameter in Fällen verwenden, in denen mehrere Abhängigkeitsdateien verwendet werden, oder wenn sie sich in verschiedenen Unterverzeichnissen befinden.\n\n```yaml copy\n      - name: Setup Go\n        uses: actions/setup-go@v5\n        with:\n          go-version: '1.17'\n          cache-dependency-path: subdir/go.sum\n```\n\nWenn du eine benutzerdefinierte Anforderung hast oder genauere Steuerungsmöglichkeiten zum Zwischenspeichern benötigst, kannst du die [`cache` Aktion](https://github.com/marketplace/actions/cache) verwenden. Weitere Informationen finden Sie unter [Referenz zum Zwischenspeichern von Abhängigkeiten](/de/actions/reference/workflows-and-actions/dependency-caching).\n\n## Deinen Code bauen und testen\n\nDu kannst die gleichen Befehle verwenden, die du auch lokal verwendest, um deinen Code zu bauen und zu testen. In diesem Beispielworkflow wird gezeigt, wie `go build` und `go test` in einem Job verwendet werden.\n\n```yaml copy\nname: Go\non: [push]\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v6\n      - name: Setup Go\n        uses: actions/setup-go@v5\n        with:\n          go-version: '1.21.x'\n      - name: Install dependencies\n        run: go get .\n      - name: Build\n        run: go build -v ./...\n      - name: Test with the Go CLI\n        run: go test\n```\n\n## Workflow-Daten als Artefakte paketieren\n\nNach Abschluss eines Workflows kannst du die resultierenden Artefakte für die Analyse hochladen. Zum Beispiel kann es notwendig sein, Logdateien, Core Dumps, Testergebnisse oder Screenshots zu speichern. Im folgenden Beispiel wird gezeigt, wie die Aktion `upload-artifact` zum Hochladen von Testergebnissen verwendet werden kann.\n\nWeitere Informationen finden Sie unter [Speichern und Freigeben von Daten mit Workflowartefakten](/de/actions/tutorials/store-and-share-data).\n\n```yaml copy\nname: Upload Go test results\n\non: [push]\n\njobs:\n  build:\n\n    runs-on: ubuntu-latest\n    strategy:\n      matrix:\n        go-version: [ '1.19', '1.20', '1.21.x' ]\n\n    steps:\n      - uses: actions/checkout@v6\n      - name: Setup Go\n        uses: actions/setup-go@v5\n        with:\n          go-version: ${{ matrix.go-version }}\n      - name: Install dependencies\n        run: go get .\n      - name: Test with Go\n        run: go test -json > TestResults-${{ matrix.go-version }}.json\n      - name: Upload Go test results\n        uses: actions/upload-artifact@v4\n        with:\n          name: Go-results-${{ matrix.go-version }}\n          path: TestResults-${{ matrix.go-version }}.json\n```"}