Maison > développement back-end > Golang > Recharge en direct et débogage des applications GO dans un conteneur docker

Recharge en direct et débogage des applications GO dans un conteneur docker

Barbara Streisand
Libérer: 2025-01-27 02:09:09
original
752 Les gens l'ont consulté

Live-Reload and Debugging Go Applications Within a Docker Container

Ce guide démontre la mise en place de rechargement en direct et de débogage des applications GO dans un conteneur Docker, reflétant un flux de travail de développement Node.js. Bien que les ressources en ligne pour cette configuration de GO spécifique soient rares, cette approche combine les avantages des environnements de Docker cohérents avec l'efficacité du rechargement en direct et la puissance du débogage.

Différences de clés: LIVE-RELOADING Redémarrez l'application sur les modifications de code; Hot-reloading Patche la mémoire sans redémarrage. Débogage, crucial pour un développement efficace, dépasse le dépannage basé sur les logaries. Docker assure un comportement d'application cohérent dans les environnements.

Environnement: Ce guide utilise Windows 11 avec WSL (sous-système Windows pour Linux) mais est adaptable à Linux (étapes identiques) et au macOS (similaire). WSL est fortement recommandé pour le développement de Windows GO en raison de sa vitesse supérieure par rapport au système de fichiers Windows natif.

Stack de technologie:

  • docker: fournit un environnement de développement cohérent et isolé.
  • AIR: Un outil GO léger pour le chargement en direct. Des alternatives comme Nodemon ou Inotify-Tools ne sont pas spécifiques à GO.
  • Delve: Un puissant débogueur Go intégrant avec des ides comme le code vs.

L'objectif est que le serveur automatisé redémarre les modifications de code, parallèlement à la fonctionnalité complète de débogage dans l'IDE.

Golang Server (exemple de fibre):

Créer main.go:

<code class="language-go">package main

import "github.com/gofiber/fiber/v2"

func main() {
    app := fiber.New()

    app.Get("/", func(c *fiber.Ctx) error {
        str := "Hello, World!"
        return c.SendString(str)
    })

    app.Listen(":3000")
}</code>
Copier après la connexion

Testez cela avec go run .

Configuration du docker (docker-compose.yml):

<code class="language-yaml">api:
    build:
      context: ./api
      dockerfile: Dockerfile
    ports:
      - '3000:3000'
      - '2345:2345'
    stop_grace_period: 0.1s
    volumes:
      - ./api:/app
    networks:
      - internal</code>
Copier après la connexion
  • build.context: Spécifie l'emplacement Dockerfile.
  • ports: expose les ports 3000 (serveur Web) et 2345 (débogueur).
  • volumes: monte le répertoire local api à /app dans le conteneur.

dockerfile (api/Dockerfile):

<code class="language-dockerfile">FROM golang:1.23.2-alpine3.20
WORKDIR /app
RUN go install github.com/go-delve/delve/cmd/dlv@latest
RUN go install github.com/air-verse/air@latest
COPY go.mod go.sum ./
RUN go mod download
USER root # For development only
EXPOSE 2345
EXPOSE 3000
CMD ["air", "-c", "air.toml"]</code>
Copier après la connexion

Configuration de l'air et de la délai (api/air.toml):

<code class="language-toml">root = "."
tmp_dir = "tmp"

[build]
full_bin = "dlv debug --build-flags=\"-gcflags='all=-N -l'\" --listen 0.0.0.0:2345 --headless --continue --accept-multiclient --output=dist/debug"</code>
Copier après la connexion

Cela configure de l'air pour utiliser Delve pour construire et exécuter l'application avec le débogage activé.

VS CODE DEBUG Configuration (api/.vscode/launch.json):

<code class="language-json">{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Connect to container",
            "type": "go",
            "debugAdapter": "dlv-dap",
            "request": "attach",
            "mode": "remote",
            "port": 2345,
            "host": "localhost",
            "trace": "verbose",
            "substitutePath": [{"from": "/home/user/project/api", "to": "/app"}]
        }
    ]
}</code>
Copier après la connexion

Cela configure le code vs pour se connecter au débogueur Delve exécutant dans le conteneur Docker. Ajustez /home/user/project/api pour correspondre au chemin de votre projet.

Cette configuration complète permet de recharger et de déboguer dans un conteneur Docker pour un développement GO efficace. N'oubliez pas d'exécuter docker-compose up après la configuration de tous les fichiers.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal