Il était confortable de créer un environnement de développement Go à l'aide de conteneurs distants, qui est une extension de VSCode, je vais donc le présenter. J'omettrai la méthode d'installation de VSCode et Docker Desktop.
Remote Containers Remote Containers est une extension des fonctions de développement à distance de VS Code, spécialisée pour Docker. De plus, il semble qu'il existe des "Remote SSH" qui se connectent à distance via SSH et des "Remote WSL" qui se connectent à distance en utilisant WSL (Windows Subsystem for Linux).
En se connectant à distance du VS Code local au conteneur Docker via VS Code Server, il est possible de développer dans un environnement distinct de l'environnement local. En d'autres termes, c'est une fonction formidable qui ne pollue pas l'environnement local tout en bénéficiant de la complétion de code etc. car tout est terminé sur Docker.
Recherchez et installez des conteneurs distants à partir des extensions de code VS.
Ouvrez le menu avec Ctrl + Shift + P
et
Sélectionnez Remote-Containers: Add Development Cotainers Configuration Files ...
.
Dans mon environnement, j'ai déjà construit l'environnement avec docker-compose.yml et DockerFile, afin que je puisse définir les paramètres initiaux en fonction de ces paramètres. Vous pouvez également utiliser les paramètres prédéfinis en sélectionnant «À partir d'une définition de configuration de conteneur prédéfinie ...». Cette fois, nous utiliserons le fichier docker-compose existant pour la configuration initiale.
.devcontainer
Lorsque vous effectuez les réglages initiaux, le dossier .devcontainer
est automatiquement créé et en dessous.
・ Devcontainer.json
・ Docker-compose.yml
Est généré automatiquement.
devcontainer.json sera le fichier de configuration.
Ici, la structure actuelle des répertoires est la suivante.
- .devcontainer
├ devcontainer.json
└ docker-compose.yml
- sample
└ Code source
- docker-compose.yml
- docker-compose.dev.yml
- Dockerfile
- Dockerfile.dev
Les fichiers générés automatiquement sont les suivants.
devcontainer.json
// If you want to run as a non-root user in the container, see .devcontainer/docker-compose.yml.
{
"name": "Existing Docker Compose (Extend)",
// Update the 'dockerComposeFile' list if you have more compose files or use different names.
// The .devcontainer/docker-compose.yml file contains any overrides you need/want to make.
"dockerComposeFile": [
"..\\docker-compose.dev.yml",
"docker-compose.yml"
],
// The 'service' property is the name of the service for the container that VS Code should
// use. Update this value and .devcontainer/docker-compose.yml to the real service name.
"service": "sample",
// The optional 'workspaceFolder' property is the path VS Code should open by default when
// connected. This is typically a file mount in .devcontainer/docker-compose.yml
"workspaceFolder": "/workspace",
// Set *default* container specific settings.json values on container create.
"settings": {
"terminal.integrated.shell.linux": null
},
// Add the IDs of extensions you want installed when the container is created.
"extensions": []
// Use 'forwardPorts' to make a list of ports inside the container available locally.
// "forwardPorts": [],
// Uncomment the next line if you want start specific services in your Docker Compose config.
// "runServices": [],
// Uncomment the next line if you want to keep your containers running after VS Code shuts down.
// "shutdownAction": "none",
// Uncomment the next line to run commands after the container is created - for example installing curl.
// "postCreateCommand": "apt-get update && apt-get install -y curl",
// Uncomment to connect as a non-root user if you've added one. See https://aka.ms/vscode-remote/containers/non-root.
// "remoteUser": "vscode"
}
docker-compose.yml
version: '3'
services:
# Update this to the name of the service you want to work with in your docker-compose.yml file
sample:
# If you want add a non-root user to your Dockerfile, you can use the "remoteUser"
# property in devcontainer.json to cause VS Code its sub-processes (terminals, tasks,
# debugging) to execute as the user. Uncomment the next line if you want the entire
# container to run as this user instead. Note that, on Linux, you may need to
# ensure the UID and GID of the container user you create matches your local user.
# See https://aka.ms/vscode-remote/containers/non-root for details.
#
# user: vscode
# Uncomment if you want to override the service's Dockerfile to one in the .devcontainer
# folder. Note that the path of the Dockerfile and context is relative to the *primary*
# docker-compose.yml file (the first in the devcontainer.json "dockerComposeFile"
# array). The sample below assumes your primary file is in the root of your project.
#
# build:
# context: .
# dockerfile: .devcontainer/Dockerfile
volumes:
# Update this to wherever you want VS Code to mount the folder of your project
- .:/workspace:cached
# Uncomment the next line to use Docker from inside the container. See https://aka.ms/vscode-remote/samples/docker-from-docker-compose for details.
# - /var/run/docker.sock:/var/run/docker.sock
# Uncomment the next four lines if you will use a ptrace-based debugger like C++, Go, and Rust.
# cap_add:
# - SYS_PTRACE
# security_opt:
# - seccomp:unconfined
# Overrides default command so things don't shut down after the process ends.
command: /bin/sh -c "while sleep 1000; do :; done"
Nous ajouterons des paramètres pour développer Go.
extensions
Les extensions VS Code installées localement ne peuvent pas être utilisées dans un conteneur distant, définissez donc les extensions pour qu'elles soient installées automatiquement au démarrage du conteneur.
Mettez dans les extensions Go. Cette chaîne peut être obtenue en cliquant avec le bouton droit de la souris sur Copy Extension Id
dans la liste des extensions.
devcontainer.json
"extensions": [
"golang.go"
]
settings
Puisque gopls est utilisé, ajoutez les paramètres en vous référant à github.
En ce qui concerne le paramètre Gomod (GO111MODULE
), il n'est plus nécessaire après 1.13, mais si vous ne le définissez pas, une erreur apparaîtra dans l'instruction d'importation, alors définissez-la.
devcontainer.json
"settings": {
"terminal.integrated.shell.linux": "/bin/bash",
"go.useLanguageServer": true,
"[go]": {
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": true,
},
// Optional: Disable snippets, as they conflict with completion ranking.
"editor.snippetSuggestions": "none",
},
"[go.mod]": {
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": true,
},
},
"gopls": {
// Add parameter placeholders when completing a function.
"usePlaceholders": true,
// If true, enable additional analyses with staticcheck.
// Warning: This will significantly increase memory usage.
"staticcheck": false,
},
"go.toolsEnvVars":{
"GO111MODULE":"on"
}
}
workspaceFolder
Définissez l'espace de travail lors du démarrage du conteneur distant.
Du côté docker-compose.yml, le volume sera monté sous / go / src /
, donc changez l'espace de travail en conséquence.
devcontainer.json
"workspaceFolder": "/go/src/sample",
La configuration est terminée.
Démarrez en fait le conteneur.
Sélectionnez Remote-Containers: Reopen in Container
dans Ctrl + Shift + P
Au premier démarrage, les outils ne sont pas installés dans / go / bin
, alors installez-les.
Puisque gopls est utilisé, installez-le à partir de la notification ci-dessous, ou
Exécutez go get -v golang.org / x / tools / gopls
Pour les autres outils, installez autre que gocode
et gocode-gomod
depuis Go: Install / Update Tools
J'ai pu confirmer que tout était installé sous / go / bin
.
À ce stade, vous pouvez développer sur le conteneur. Bien sûr, il est géré conteneur par conteneur, donc si vous supprimez un conteneur, celui installé disparaîtra, vous devrez donc le reconfigurer.
Vous pouvez également déboguer à l'intérieur du conteneur.
Créez un dossier .vscode
dans le même répertoire que le code source monté pour créer launch.json
.
launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Remote",
"type": "go",
"request": "launch",
"host": "localhost",
"program": "${workspaceRoot}",
"args": []
}
]
}
Je décrirai le fichier qui a finalement été créé. J'espère que cela vous aidera.
devcontianer.json
{
"name": "Existing Docker Compose (Extend)",
"dockerComposeFile": [
"docker-compose.yml"
],
"service": "sample",
"workspaceFolder": "/go/src/sample",
"settings": {
"terminal.integrated.shell.linux": "/bin/bash",
"go.useLanguageServer": true,
"[go]": {
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": true,
},
"editor.snippetSuggestions": "none",
},
"[go.mod]": {
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": true,
},
},
"gopls": {
"usePlaceholders": true,
"staticcheck": false,
},
"go.toolsEnvVars":{
"GO111MODULE":"on"
}
},
"extensions": [
"golang.go"
]
}
docker-compose.yml
version: '3'
services:
# Update this to the name of the service you want to work with in your docker-compose.yml file
sample:
image: golang:1.14
volumes:
- ./../:/go/src/:cached
tty: true
environment:
- MYSQL_CONNECTION_STRING=${CONNECTION_STRING}
networks:
- default
- db-network
networks:
db-network:
external: true
--Go study (1) Paramètre d'environnement Mac + VSCode + Go: https://qiita.com/oruharo/items/545378eae5c707f717ed