{"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/enterprise-cloud@latest/actions","title":"GitHub Actions"},{"href":"/pt/enterprise-cloud@latest/actions/tutorials","title":"Tutoriais"},{"href":"/pt/enterprise-cloud@latest/actions/tutorials/build-and-test-code","title":"Criar e testar código"},{"href":"/pt/enterprise-cloud@latest/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\nOs executores hospedados do GitHub contam com um cache de ferramentas com software pré-instalado, que inclui as dependências necessárias para a linguagem 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/enterprise-cloud@latest/actions/concepts/runners/github-hosted-runners#preinstalled-software-for-github-owned-images).\n\n## Pré-requisitos\n\nVocê já deve estar familiarizado com a sintaxe YAML e como ela é usada com GitHub Actions. Para saber mais, confira [Sintaxe de fluxo de trabalho para o GitHub Actions](/pt/enterprise-cloud@latest/actions/reference/workflows-and-actions/workflow-syntax).\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\nGitHub fornece um modelo de fluxo de trabalho Go que deve funcionar para a 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 workflow \"Go - by 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\n   O `go.yml` arquivo de fluxo de trabalho é adicionado ao `.github/workflows` diretório do repositório.\n\n## Como especificar uma versão do Go\n\nA maneira mais fácil de especificar uma versão go é usando a ação `setup-go` fornecida por 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 runner hospedado no GitHub, passe a versão desejada na 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 Go com GitHub Actions, pois ajuda a garantir 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@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### 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@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### 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/enterprise-cloud@latest/actions/reference/workflows-and-actions/dependency-caching).\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@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## 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/enterprise-cloud@latest/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```"}