Aufbau einer Entwicklungsumgebung für das Go-Sprachframework Gin. (Unterstützt Hot Reload und VS Code Debugging)
Dieser Code wird auf GitHub veröffentlicht. https://github.com/yolo-lin/go-demo
Gin: Go Framework cosmtrek / air: Hot Reload delve: Debuggen
.zshrc
export GO111MODULE=on
/src
$gehe mod init Paketname
Die Verzeichnisstruktur von Gin ist nicht festgelegt, daher ist das Folgende mein eigener Stil. Platzieren Sie den gesamten Hauptquellcode unter src. In Zukunft planen wir, src um Modelle und Controller zu erweitern.
.
├── .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 von Luft
RUN go get -u github.com/cosmtrek/air
#Installation von Delve
RUN go get -u github.com/go-delve/delve/cmd/dlv
#Luft starten
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
Leiten Sie das offizielle [air_example.toml] um (https://github.com/cosmtrek/air/blob/master/air_example.toml)
Die Beschreibung zum Debuggen wurde unten hinzugefügt
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
Wenn nun "docker-compose up -d" fertig ist, wird die Konfigurationsdatei automatisch angepasst und im laufenden Betrieb neu geladen.
vscode Installieren Sie die Erweiterung von Go und fügen Sie die folgende Debug-Einstellungsdatei hinzu.
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,
}
]
}
Wenn Sie debuggen müssen, ändern Sie die Cosmtrek / Air-Einstellungen.
Nachdem Sie die Entwicklung ausgetauscht und full_bin
s debuggt und Docker-Compose neu gestartet haben, können Sie mit vscode debuggen.
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"
Wenn der Code jedoch aktualisiert wird, wird er automatisch aus cosmtrek / air erstellt, aber die vscode-Seite wird getrennt und Sie müssen die Verbindung manuell wiederherstellen.
Recommended Posts