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 Von GitHub gehostete Runner.
Voraussetzungen
Du solltest bereits mit der YAML-Syntax vertraut sein und wissen, wie sie mit GitHub Actions verwendet wird. Weitere Informationen finden Sie 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.
- 
Navigieren Sie auf GitHub zur Hauptseite des Repositorys.
 - 
Klicke unter dem Repositorynamen auf Actions.

 - 
Wenn du bereits über einen Workflow im Repository verfügst, klicke auf Neuer Workflow.
 - 
Auf der Seite „Workflow auswählen“ wird eine Auswahl empfohlener Workflowvorlagen angezeigt. Suchen Sie nach „go“.
 - 
Filtern Sie die Auswahl von Workflows, indem Sie auf Continuous Integration klicken.
 - 
Klicken Sie im Workflow „Go – von { % daten variables.product.prodname_actions %}“ auf Konfigurieren.

 - 
Bearbeiten Sie den Workflow nach Bedarf. Ändern Sie zum Beispiel die Version von Go.
 - 
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
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@v5
      - 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
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@v5
      - 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:
      - 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'
      - 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:
    steps:
      - uses: actions/checkout@v5
      - 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
    steps:
      - uses: actions/checkout@v5
      - 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. Bei Verwendung der setup-go-Aktion ist das Zwischenspeichern standardmäßig aktiviert.
Die setup-go-Aktion 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.
      - name: Setup Go
        uses: actions/setup-go@v5
        with:
          go-version: '1.17'
          cache-dependency-path: subdir/go.sum
      - 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 finden Sie unter Referenz zum Zwischenspeichern von Abhängigkeiten.
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:
name: Go
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - 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
name: Go
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - 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 finden Sie unter Speichern und Freigeben von Daten mit Workflowartefakten.
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@v5
      - 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@v4
        with:
          name: Go-results-${{ matrix.go-version }}
          path: TestResults-${{ matrix.go-version }}.json
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@v5
      - 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@v4
        with:
          name: Go-results-${{ matrix.go-version }}
          path: TestResults-${{ matrix.go-version }}.json