{"meta":{"title":"Como criar e testar projetos com o Go","intro":"Saiba como criar um fluxo de trabalho de integração contínua (CI) para criar e testar seu projeto Go.","product":"GitHub Actions","breadcrumbs":[{"href":"/pt/actions","title":"GitHub Actions"},{"href":"/pt/actions/tutorials","title":"Tutoriais"},{"href":"/pt/actions/tutorials/build-and-test-code","title":"Criar e testar código"},{"href":"/pt/actions/tutorials/build-and-test-code/go","title":"Go"}],"documentType":"article"},"body":"# Como criar e testar projetos com o Go\n\nSaiba como criar um fluxo de trabalho de integração contínua (CI) para criar e testar seu projeto Go.\n\n## Introdução\n\nEste guia mostra como criar, testar e publicar um pacote Go.\n\nExecutores hospedados em GitHub têm um cache de ferramentas com software pré-instalado que inclui dependências do Go. Para ver a lista completa de programas de software atualizados e as versões pré-instaladas do Go, confira [Executores hospedados no GitHub](/pt/actions/using-github-hosted-runners/about-github-hosted-runners#preinstalled-software).\n\n## Pré-requisitos\n\nVocê já deve estar familiarizado com a sintaxe YAML e como é usado com GitHub Actions. Para saber mais, confira [Sintaxe de fluxo de trabalho para o GitHub Actions](/pt/actions/using-workflows/workflow-syntax-for-github-actions).\n\nRecomendamos que você tenha um entendimento básico da linguagem Go. Para obter mais informações, confira [Introdução ao Go](https://golang.org/doc/tutorial/getting-started).\n\n## Usando um modelo de fluxo de trabalho do Go\n\nPara uma introdução rápida, adicione um modelo de fluxo de trabalho ao diretório `.github/workflows` do repositório.\n\nO GitHub oferece um modelo de fluxo de trabalho do Go que deve funcionar na maioria dos projetos Go. As seções subsequentes deste guia fornecem exemplos de como você pode personalizar esse modelo de fluxo de trabalho.\n\n1. Em GitHub, acesse a página principal do repositório.\n\n2. No nome do repositório, clique em **<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   ![Captura de tela das guias do repositório \"github/docs\". A guia \"Ações\" está realçada com um contorno laranja.](/assets/images/help/repository/actions-tab-global-nav-update.png)\n\n3. Se você já tiver um fluxo de trabalho no repositório, clique em **Novo fluxo de trabalho**.\n\n4. A página \"Escolher um fluxo de trabalho\" mostra uma seleção de modelos de fluxo de trabalho recomendados. Pesquise por \"go\".\n\n5. Filtre a seleção de fluxos de trabalho clicando em **Integração contínua**.\n\n6. No fluxo de trabalho \"Go - por GitHub Actions\", clique em **Configurar**.\n\n   ![Captura de tela da página \"Escolher um fluxo de trabalho\". O botão \"Configurar\" no fluxo de trabalho \"Go\" é realçado com um contorno laranja.](/assets/images/help/actions/starter-workflow-go.png)\n\n7. Edite o fluxo de trabalho conforme necessário. Por exemplo, altere a versão do Go.\n\n8. Clique em **Confirmar alterações**.\n\nO arquivo de fluxo de trabalho `go.yml` é adicionado ao diretório `.github/workflows` do seu repositório.\n\n## Como especificar uma versão do Go\n\nA maneira mais fácil de especificar uma versão do Go é usando a ação `setup-go` fornecida pelo GitHub. Para obter mais informações, confira a ação [`setup-go`](https://github.com/actions/setup-go/).\n\nPara usar uma versão pré-instalada do Go em um executor hospedado no GitHub, passe a versão relevante para a propriedade `go-version` da ação `setup-go`. Essa ação localiza uma versão específica do Go no cache de ferramentas em cada executor e adiciona os binários necessários a `PATH`. Estas alterações persistirão para o resto do trabalho.\n\nA ação `setup-go` é a maneira recomendada de usar o Go com o GitHub Actions, pois garante um comportamento consistente entre diferentes executores e diferentes versões do Go. Se você estiver usando um executor auto-hospedado, precisará instalar o Go e adicioná-lo a `PATH`.\n\n### Como usar várias versões do 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@v5\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### Como usar uma versão específica do Go\n\nVocê pode configurar o trabalho para usar uma versão específica do Go, como `1.20.8`. Como alternativa, você pode usar a sintaxe da versão semântica para obter a última versão secundária. Este exemplo usa a versão mais recente do patch do Go 1.21:\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## Instalar dependências\n\nVocê pode usar `go get` para instalar dependências:\n\n```yaml copy\n    steps:\n      - uses: actions/checkout@v5\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### Memorizar dependências\n\nVocê pode armazenar em cache e restaurar as dependências usando a ação [`setup-go`](https://github.com/actions/setup-go). Por padrão, o cache é habilitado quando a ação `setup-go` é usada.\n\nA ação `setup-go` procura o arquivo de dependência, `go.sum`, na raiz do repositório e usa o hash do arquivo de dependência como parte da chave de cache.\n\nUse o parâmetro `cache-dependency-path` para casos em que vários arquivos de dependência são usados ou quando eles estão localizados em subdiretórios diferentes.\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\nSe houver uma necessidade específica ou precisar de controles mais precisos de cache, use a [ação `cache`](https://github.com/marketplace/actions/cache). Para saber mais, confira [Referência do cache de dependência](/pt/actions/using-workflows/caching-dependencies-to-speed-up-workflows).\n\n## Criar e testar seu código\n\nVocê pode usar os mesmos comandos usados localmente para criar e testar seu código. Este fluxo de trabalho de exemplo demonstra como usar `go build` e `go test` em um trabalho:\n\n```yaml copy\nname: Go\non: [push]\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v5\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## Empacotar dados do fluxo de trabalho como artefatos\n\nApós a conclusão de um fluxo de trabalho, você poderá fazer o upload dos artefatos resultantes para análise. Por exemplo, é possível que você precise salvar os arquivos de registro, os despejos de núcleo, os resultados de teste ou capturas de tela. O exemplo a seguir demonstra como você pode usar a ação `upload-artifact` para carregar os resultados do teste.\n\nPara saber mais, confira [Armazenar e compartilhar dados com artefatos de fluxo de trabalho](/pt/actions/using-workflows/storing-workflow-data-as-artifacts).\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@v5\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```"}