Rechargement à chaud Golang + Gin + Docker, construction de l'environnement de débogage VS Code

Aperçu

Création d'un environnement de développement pour le framework de langage Go Gin. (Prend en charge le rechargement à chaud et le débogage VS Code)

Ce code est publié sur GitHub. https://github.com/yolo-lin/go-demo

environnement

Paquet à présenter

Gin: cadre Go cosmtrek / air: rechargement à chaud delve: Débogage

Préparation préalable

--Go installation: Installer depuis Officiel

.zshrc


export GO111MODULE=on

--Initialisation des modules Go

/src


$nom du package go mod init

Structure du répertoire

La structure des répertoires de Gin n'est pas fixe, donc ce qui suit est mon propre style. Placez tout le code source principal sous src. À l'avenir, nous prévoyons d'ajouter des «modèles» et des «contrôleurs» à src.

.
├── .vscode
│   └── launch.json
├── docker
│   ├── go
│   │   └── Dockerfile
│   └── mysql
│       └── Dockerfile
├── src
│   ├── go.mod
│   ├── go.sum
│   ├── .air.toml
│   └── main.go
│
└── docker-compose.yml

Docker Go

/docker/go/Dockerfile


FROM golang:1.15.2

ENV GO111MODULE=on

COPY src/ /go/src/app/

WORKDIR /go/src/app

# cosmtrek/installation d'air
RUN go get -u github.com/cosmtrek/air
#installation de delve
RUN go get -u github.com/go-delve/delve/cmd/dlv

#Démarrer l'air
CMD air -c .air.toml

MySQL

/docker/go/Dockerfile


FROM mysql:8.0

RUN chown -R mysql /var/lib/mysql && \
    chgrp -R mysql /var/lib/mysql

docker-compose

yml:./docker-compose.yml


version: '3'

networks:
    backend:
      driver: bridge

services:
    go:
        container_name: go
        build:
            context: .
            dockerfile: ./docker/go/Dockerfile
        ports:
            - 8080:8080
            - 2345:2345
        links:
            - mysql
        tty: true
        volumes:
            - ./src:/go/src/app
        depends_on:
            - mysql
        security_opt:
            - seccomp:unconfined
        cap_add:
            - SYS_PTRACE
        networks:
            - backend

    mysql:
        container_name: mysql
        build:
            context: .
            dockerfile: ./docker/mysql/Dockerfile
        environment:
            MYSQL_USER: root
            MYSQL_ROOT_PASSWORD: password
            MYSQL_DATABASE: demo
        hostname: mysql
        ports:
            - "3306:3306"
        volumes:
            - ./docker/mysql/data:/var/lib/mysql
        security_opt:
            - seccomp:unconfined
        networks:
            - backend

    phpmyadmin:
        image: phpmyadmin/phpmyadmin
        environment:
            - PMA_ARBITRARY=1
            - PMA_HOST=mysql
            - PMA_USER=root
            - PMA_PASSWORD=password
        ports:
            - "8081:80"
        depends_on:
            - mysql
        networks:
            - backend

paramètres cosmtrek / air

Détourner le fonctionnaire air_example.toml

Ajout de la description du débogage ci-dessous

toml:/src/.air.toml


# Debug
#full_bin = "APP_ENV=dev APP_USER=air /go/bin/dlv exec ./tmp/main --headless=true --listen=:2345 --api-version=2 --accept-multiclient"

toml:/src/.air.toml


# Config file for [Air](https://github.com/cosmtrek/air) in TOML format

# Working directory
# . or absolute path, please note that the directories following must be under root.
root = "."
tmp_dir = "tmp"

[build]
# Just plain old shell command. You could use `make` as well.
cmd = "go build -o ./tmp/main ."
# Binary file yields from `cmd`.
bin = "tmp/main"

# Customize binary.
full_bin = "APP_ENV=dev APP_USER=air ./tmp/main"

# Debug
#full_bin = "APP_ENV=dev APP_USER=air /go/bin/dlv exec ./tmp/main --headless=true --listen=:2345 --api-version=2 --accept-multiclient"

# Watch these filename extensions.
include_ext = ["go", "tpl", "tmpl", "html"]
# Ignore these filename extensions or directories.
exclude_dir = ["assets", "tmp", "vendor", "frontend/node_modules"]
# Watch these directories if you specified.
include_dir = []
# Exclude files.
exclude_file = []
# This log file places in your tmp_dir.
log = "air.log"
# It's not necessary to trigger build each time file changes if it's too frequent.
delay = 1000 # ms
# Stop running old binary when build errors occur.
stop_on_error = true
# Send Interrupt signal before killing process (windows does not support this feature)
send_interrupt = false
# Delay after sending Interrupt signal
kill_delay = 500 # ms

[log]
# Show log time
time = false

[color]
# Customize each part's color. If no color found, use the raw app log.
main = "magenta"
watcher = "cyan"
build = "yellow"
runner = "green"

[misc]
# Delete tmp directory on exit
clean_on_exit = true

Maintenant, lorsque docker-compose up -d est terminé, le fichier de configuration sera automatiquement adapté et rechargé à chaud.

déboguer

vscode Installez l'extension de Go et ajoutez le fichier de paramètres de débogage suivant.

json:/.vscode/launch.json


{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Remote",
            "type": "go",
            "request": "launch",
            "mode": "remote",
            "program": "${workspaceFolder}",
            "port": 2345,
            "host": "127.0.0.1",
            "showLog": true,
        }
    ]
}

Si vous avez besoin de déboguer, modifiez les paramètres cosmtrek / air. Après avoir échangé le développement et le débogage de full_bins et redémarré docker-compose, vous pourrez déboguer avec vscode.

toml:/src/.air.toml


# Customize binary.
# full_bin = "APP_ENV=dev APP_USER=air ./tmp/main"

# Debug
full_bin = "APP_ENV=dev APP_USER=air /go/bin/dlv exec ./tmp/main --headless=true --listen=:2345 --api-version=2 --accept-multiclient"

Cependant, si le code est mis à jour, il sera automatiquement construit à partir de cosmtrek / air, mais le côté vscode sera déconnecté et vous devrez vous reconnecter manuellement. CleanShot 2020-09-27 at 16.22.58.png

Recommended Posts

Rechargement à chaud Golang + Gin + Docker, construction de l'environnement de débogage VS Code
Construction de l'environnement Golang
VS Code + Azure Functions + Procédure de construction de l'environnement Python
Modèle de construction d'environnement de développement local Python [Flask / Django / Jupyter avec Docker + VS Code]
Construction d'un environnement d'analyse de données Python facile avec Windows10 Pro x VS Code x Docker
Construction de l'environnement: GCP + Docker
Construction de l'environnement Golang [goenv]
Créer un environnement de développement VS Code + Docker avec une machine virtuelle Linux
Construction de l'environnement Docker + Django + React
[Linux] Construction de l'environnement Docker sur Redhat
[docker] Construction de l'environnement python3.5 + numpy + matplotlib
Compilation croisée de Raspberry Pi et création d'un environnement de développement de débogage à distance avec VS Code