Skip to main content
We publish frequent updates to our documentation, and translation of this page may still be in progress. For the most current information, please visit the English documentation.

Erstellen und Testen von Go

Du kannst einen Continuous Integration-Workflow (CI) erstellen, um dein Go-Projekt zu erstellen und zu testen.

Einführung

In dieser Anleitung erfährst du, wie du ein Go-Paket erstellst, testest und veröffentlichst.

Von GitHub gehostete Runner verfügen über einen Toolcache mit vorinstallierter Software, in dem die Abhängigkeiten von Go enthalten sind. Eine umfassende Liste mit aktueller Software und den vorinstallierten Versionen von Go findest du unter Informationen zu von GitHub gehosteten Runnern.

Voraussetzungen

Du solltest bereits mit der YAML-Syntax vertraut sein und wissen, wie sie mit GitHub Actions verwendet wird. Weitere Informationen findest du unter Workflowsyntax für GitHub Actions.

Du solltest über grundlegende Kenntnisse in Bezug auf die Go-Programmiersprache verfügen. Weitere Informationen findest du unter Erste Schritte mit Go.

Verwenden des Go-Starterworkflows

GitHub enthält einen Go-Starterworkflow, der die für die meisten Go-Projekte funktionieren sollte. Dieser Leitfaden enthält Beispiele, die du zum Anpassen des Starterworkflows verwenden kannst. Weitere Informationen findest du im Go-Starterworkflow.

Für einen schnellen Einstieg fügst du den Starterworkflow zum Verzeichnis .github/workflows deines Repositorys hinzu.

YAML
name: Go package

on: [push]

jobs:
  build:

    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      - name: Set up Go
        uses: actions/setup-go@v3
        with:
          go-version: 1.15

      - name: Build
        run: go build -v ./...

      - name: Test
        run: go test -v ./...

Angeben einer Go-Version

Der einfachste Weg, eine Go-Version anzugeben, bietet die Aktion setup-go von GitHub. Weitere Informationen findest du unter der setup-go-Aktion.

Um eine vorinstallierte Version von Go auf einen von GitHub gehosteten Runner zu verwenden, musst du die relevante Version an die go-version-Eigenschaft der setup-go-Aktion übergeben. 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.

Die Aktion setup-go wird als Methode zur Verwendung von Go mit GitHub Actions empfohlen, da damit ein konsistentes Verhalten bei verschiedenen Runnern und verschiedenen Version von Go gewährleistet werden kann. Wenn du einen selbstgehosteten Runner verwendest, musst du .NET installieren und zu PATH hinzufügen.

Verwenden mehrerer Versionen von Go

YAML
name: Go

on: [push]

jobs:
  build:

    runs-on: ubuntu-latest
    strategy:
      matrix:
        go-version: [ '1.14', '1.15', '1.16.x' ]

    steps:
      - uses: actions/checkout@v3
      - name: Setup Go ${{ matrix.go-version }}
        uses: actions/setup-go@v3
        with:
          go-version: ${{ matrix.go-version }}
      # You can test your matrix by printing the current Go version
      - name: Display Go version
        run: go version

Verwenden einer bestimmten Version von Go

Du kannst einen Auftrag so konfigurieren, dass eine bestimmte Version von Go verwendet wird, z. B. 1.16.2. 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.16 verwendet:

YAML
      - name: Setup Go 1.16.x
        uses: actions/setup-go@v3
        with:
          # Semantic version range syntax or exact version of Go
          go-version: '1.16.x'

Installieren von Abhängigkeiten

Du kannst go get zum Installieren von Abhängigkeiten verwenden:

YAML
    steps:
      - uses: actions/checkout@v3
      - name: Setup Go
        uses: actions/setup-go@v3
        with:
          go-version: '1.16.x'
      - name: Install dependencies
        run: |
          go get .
          go get example.com/octo-examplemodule
          go get example.com/octo-examplemodule@v1.3.4

Abhängigkeiten „cachen“ (zwischenspeichern)

Du kannst die Abhängigkeiten mithilfe der Aktion setup-go zwischenspeichern und wiederherstellen. Standardmäßig ist die Zwischenspeicherung deaktiviert, du kannst jedoch den cache-Parameter auf true festlegen, um sie zu aktivieren.

Wenn die Zwischenspeicherung aktiviert ist, sucht die setup-go-Aktion nach der Abhängigkeitsdatei go.sum im Repositorystamm und verwendet den Hash der Abhängigkeitsdatei als Teil des Cacheschlüssels.

YAML
      - name: Setup Go
        uses: actions/setup-go@v3
        with:
          go-version: '1.16.x'
          cache: true

Alternativ kannst du den cache-dependency-path-Parameter in Fällen verwenden, in denen mehrere Abhängigkeitsdateien verwendet werden, oder wenn sie sich in verschiedenen Unterverzeichnissen befinden.

YAML
      - uses: actions/setup-go@v3
        with:
          go-version: '1.17'
          cache: true
          cache-dependency-path: subdir/go.sum

Wenn du eine benutzerdefinierte Anforderung verwendest oder genauere Steuerungsmöglichkeiten zum Zwischenspeichern benötigst, kannst du die Aktion cache verwendest. Weitere Informationen findest du unter Zwischenspeichern von Abhängigkeiten zum Beschleunigen von Workflows.

Deinen Code bauen und testen

Du kannst die gleichen Befehle verwenden, die du auch lokal verwendest, um deinen Code zu bauen und zu testen. In diesem Beispielworkflow wird veranschaulicht, wie die Befehle go build und go test in einem Auftrag verwendet werden:

YAML
name: Go
on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3
      - name: Setup Go
        uses: actions/setup-go@v3
        with:
          go-version: '1.16.x'
      - name: Install dependencies
        run: go get .
      - name: Build
        run: go build -v ./...
      - name: Test with the Go CLI
        run: go test

Workflow-Daten als Artefakte paketieren

Nach 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.

Weitere Informationen findest du unter Speichern von Workflowdaten als Artefakte.

YAML
name: Upload Go test results

on: [push]

jobs:
  build:

    runs-on: ubuntu-latest
    strategy:
      matrix:
        go-version: [ '1.14', '1.15', '1.16.x' ]

    steps:
      - uses: actions/checkout@v3
      - name: Setup Go
        uses: actions/setup-go@v3
        with:
          go-version: ${{ matrix.go-version }}
      - name: Install dependencies
        run: go get .
      - name: Test with Go
        run: go test -json > TestResults-${{ matrix.go-version }}.json
      - name: Upload Go test results
        uses: actions/upload-artifact@v3
        with:
          name: Go-results-${{ matrix.go-version }}
          path: TestResults-${{ matrix.go-version }}.json