Skip to main content

Erstellen und Testen von Go

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

Note

Auf GitHub gehostete Runner werden aktuell nicht auf GitHub Enterprise Server unterstützt. Weitere Informationen zur geplanten zukünftigen Unterstützung findest Du in der GitHub public roadmap.

Einführung

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

GitHub-gehostete Runner haben einen Toolcache mit vorinstallierter Software, die Abhängigkeiten für Go einschließt. Eine vollständige Liste der aktuellen Software und der vorinstallierten Versionen von Go findest du unter Verwenden von auf 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 einer Go-Workflowvorlage

Fügen Sie für einen schnellen Einstieg dem Verzeichnis .github/workflows Ihres Repositorys eine Workflowvorlage hinzu.

GitHub bietet eine Go-Workflowvorlage, 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.

  1. Navigieren Sie auf GitHub zur Hauptseite des Repositorys.

  2. Klicke unter dem Namen deines Repositorys auf Aktionen.

    Screenshot: Registerkarten für das Repository „github/docs“. Die Registerkarte „Aktionen“ ist mit einem orangefarbenen Rahmen hervorgehoben.

  3. Wenn du bereits über einen Workflow im Repository verfügst, klicke auf Neuer Workflow.

  4. Auf der Seite „Workflow auswählen“ wird eine Auswahl empfohlener Workflowvorlagen angezeigt. Suchen Sie nach „go“.

  5. Filtern Sie die Auswahl von Workflows, indem Sie auf Continuous Integration klicken.

  6. Klicken Sie im Workflow „Go – von { % daten variables.product.prodname_actions %}“ auf Konfigurieren.

    Screenshot: Seite „Einen Workflow auswählen“ Die Schaltfläche „Konfigurieren“ ist mit einem orangefarbenen Umriss hervorgehoben.
    Wenn Sie die Workflowvorlage „Go – von GitHub Actions“ nicht finden, kopieren Sie den folgenden Workflowcode in eine neue Datei namens go.yml im Verzeichnis .github/workflows Ihres Repositorys.

    YAML
    name: Go
    
    on:
      push:
        branches: [ "main" ]
      pull_request:
        branches: [ "main" ]
    
    jobs:
      build:
    
        runs-on: self-hosted
        steps:
          - uses: actions/checkout@v4
    
          - name: Set up Go
            uses: actions/setup-go@v5
            with:
              go-version: '1.20'
    
          - name: Build
            run: go build -v ./...
    
          - name: Test
            run: go test -v ./...
    
  7. Bearbeiten Sie den Workflow nach Bedarf. Ändern Sie zum Beispiel die Version von Go.

  8. Klicke auf Änderungen committen.

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.19', '1.20', '1.21.x' ]

    steps:
      - uses: actions/checkout@v4
      - name: Setup Go ${{ matrix.go-version }}
        uses: actions/setup-go@v5
        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.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:

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

Installieren von Abhängigkeiten

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

YAML
    steps:
      - uses: actions/checkout@v4
      - name: Setup Go
        uses: actions/setup-go@v5
        with:
          go-version: '1.21.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 Abhängigkeiten mithilfe der Aktion setup-go zwischenspeichern und wiederherstellen. Standardmäßig ist das Zwischenspeichern aktiviert, wenn die Aktion setup-go verwendet wird.

Die Aktion setup-go sucht nach der Abhängigkeitsdatei go.sum im Repositorystamm und verwendet den Hash der Abhängigkeitsdatei als Teil des Cacheschlüssels.

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

YAML
      - name: Setup Go
        uses: actions/setup-go@v5
        with:
          go-version: '1.17'
          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 Abhängigkeiten zwischenspeichern um Workflows zu beschleunigen.

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@v4
      - name: Setup Go
        uses: actions/setup-go@v5
        with:
          go-version: '1.21.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 und Freigeben von Daten aus einem Workflow.

YAML
name: Upload Go test results

on: [push]

jobs:
  build:

    runs-on: ubuntu-latest
    strategy:
      matrix:
        go-version: [ '1.19', '1.20', '1.21.x' ]

    steps:
      - uses: actions/checkout@v4
      - name: Setup Go
        uses: actions/setup-go@v5
        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