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
Gin: cadre Go cosmtrek / air: rechargement à chaud delve: Débogage
--Go installation: Installer depuis Officiel
.zshrc
export GO111MODULE=on
--Initialisation des modules Go
/src
$nom du package go mod init
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
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.
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_bin
s 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.
Recommended Posts