{"meta":{"title":"Compilación y prueba de Go","intro":"Aprende a crear un flujo de trabajo de integración continua (CI) para compilar y probar tu proyecto de Go.","product":"GitHub Actions","breadcrumbs":[{"href":"/es/actions","title":"GitHub Actions"},{"href":"/es/actions/tutorials","title":"Tutoriales"},{"href":"/es/actions/tutorials/build-and-test-code","title":"Crea y prueba tu código"},{"href":"/es/actions/tutorials/build-and-test-code/go","title":"Go"}],"documentType":"article"},"body":"# Compilación y prueba de Go\n\nAprende a crear un flujo de trabajo de integración continua (CI) para compilar y probar tu proyecto de Go.\n\n## Introducción\n\nEsta guía te muestra cómo compilar, probar y publicar un paquete de Go.\n\nLos ejecutores hospedados en GitHub tienen un caché de herramientas con software pre-instalado, que incluye las dependencias para Go. Para obtener una lista completa de software actualizado y las versiones preinstaladas de Go, consulta [Ejecutores hospedados en GitHub](/es/actions/using-github-hosted-runners/about-github-hosted-runners#preinstalled-software).\n\n## Requisitos previos\n\nYa debes estar familiarizado con la sintaxis de YAML y con cómo se utiliza con GitHub Actions. Para más información, consulta [Sintaxis del flujo de trabajo para Acciones de GitHub](/es/actions/using-workflows/workflow-syntax-for-github-actions).\n\nTe recomendamos que tengas un entendimiento básico del lenguaje Go. Para más información, ve [Introducción a Go](https://golang.org/doc/tutorial/getting-started).\n\n## Uso de una plantilla de flujo de trabajo de Go\n\nPara comenzar rápidamente, agregue una plantilla de flujo de trabajo al directorio `.github/workflows` del repositorio.\n\nGitHub proporciona una plantilla de flujo de trabajo de Go que debería funcionar para la mayoría de los proyectos de Go. En las secciones siguientes de esta guía se proporcionan ejemplos de cómo puede personalizar esta plantilla de flujo de trabajo.\n\n1. En GitHub, navegue hasta la página principal del repositorio.\n\n2. En el nombre del repositorio, haz clic en **<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 pantalla de las pestañas del repositorio \"github/docs\". La pestaña \"Proyectos\" aparece resaltada con un contorno naranja.](/assets/images/help/repository/actions-tab-global-nav-update.png)\n\n3. Si ya tiene un flujo de trabajo en su repositorio, haga clic en **New workflow** (Nuevo flujo de trabajo).\n\n4. En la página \"Elegir un flujo de trabajo\" se muestra una selección de plantillas de flujo de trabajo recomendadas. Busca «Go».\n\n5. Filtra la selección de flujos de trabajo con un clic en **Integración continua**.\n\n6. En el flujo de trabajo \"Go - by GitHub Actions\", haz clic en **Configurar**.\n\n   ![Captura de pantalla de la página «Elegir un flujo de trabajo». El botón «Configurar» en el flujo de trabajo «Go» está resaltado con un contorno naranja.](/assets/images/help/actions/starter-workflow-go.png)\n\n7. Edita el flujo de trabajo según sea necesario. Por ejemplo, cambia la versión de Go.\n\n8. Haga clic en **Commit changes** (Confirmar cambios).\n\nEl archivo de flujo de trabajo `go.yml` se agrega al directorio `.github/workflows` de tu repositorio.\n\n## Especificación de una versión de Go\n\nLa forma más fácil de especificar una versión de Go consiste en usar la acción `setup-go` proporcionada por GitHub. Para obtener más información, ve la [acción`setup-go`](https://github.com/actions/setup-go/).\n\nPara usar una versión preinstalada de Go en un ejecutor hospedado por GitHub, pasa la versión pertinente a la propiedad `go-version` de la acción `setup-go`. Esta acción busca una versión específica de Go en la caché de herramientas en cada ejecutor y agrega los binarios necesarios a `PATH`. Estos cambios persistirán para el resto del trabajo.\n\nLa acción `setup-go` es la forma recomendada de usar Go con GitHub Actions, ya que ayuda a garantizar el comportamiento coherente entre los distintos ejecutores y versiones de Go. Si vas a usar un ejecutor auto hospedado, tienes que instalar Go y agregarlo a `PATH`.\n\n### Uso de varias versiones de 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### Uso de una versión específica de Go\n\nPuedes configurar el trabajo para que use una versión específica de Go, como `1.20.8`. Como alternativa, puedes utilizar una sintaxis de versión semántica para obtener el último lanzamiento menor. Este ejemplo usa la versión de revisión más reciente de 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## Instalación de dependencias\n\nPuedes usar `go get` para instalar dependencias:\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### Almacenar dependencias en caché\n\nPuedes almacenar en caché las dependencias y restaurarlas mediante la [acción `setup-go`](https://github.com/actions/setup-go). El almacenamiento en caché está habilitado de manera predeterminada cuando se usa la acción `setup-go`.\n\nLa acción `setup-go` busca el archivo de dependencia, `go.sum`, en la raíz del repositorio y usa el hash del archivo de dependencia como parte de la clave de caché.\n\nPuede susar el parámetro `cache-dependency-path` para los casos en los que se usan varios archivos de dependencia o cuando se encuentran en distintos subdirectorios.\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\nSi tiene una necesidad específica o necesita controles más precisos para el almacenamiento en caché, puede usar la [acción `cache`](https://github.com/marketplace/actions/cache). Para más información, consulta [Referencia de almacenamiento en caché de dependencias](/es/actions/using-workflows/caching-dependencies-to-speed-up-workflows).\n\n## Construir y probar tu código\n\nPuedes usar los mismos comandos que usas de forma local para construir y probar tu código. En este flujo de trabajo de ejemplo se muestra cómo usar `go build` y `go test` en un trabajo:\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## Empaquetar datos de flujo de trabajo como artefactos\n\nDespués de que se completa un flujo de trabajo, puedes cargar los artefactos que se den como resultado para su análisis. Por ejemplo, es posible que debas guardar los archivos de registro, los vaciados de memoria, los resultados de las pruebas o las capturas de pantalla. En el ejemplo siguiente se muestra cómo puede usar la acción `upload-artifact` para cargar los resultados de la prueba.\n\nPara más información, consulta [Almacenamiento y uso compartido de datos con artefactos de flujo de trabajo](/es/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@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```"}