I made some Go scripts that require user input fmt.Scanln(&fileName) during the execution. When I use the Go debugger built into VSCode which is the launch type, it works but there is no way to enter any prompts when your exeuctable asks for a input. With other programming languages like NodeJS and PHP, there is way to run the scripts in “debugging mode” where it will run the code but before it executes the code, it will wait to attach to a debugger on your system and then execute the code. This has always allowed me to use the terminal for inputs in the executable.
For example to do this in NodeJS, you will use node --inspect-brk=0.0.0.0 main.js instead of node main.js and then run the debugger in VSCode to attach it to the executing script. Is there a way to do this with Go? Do I need to set something up to achieve this?
I am on Linux Mint and cannot find any commands to run go run . but to wait for a debugger to attach to the executable before executing.


Thank you. Been struggling to get my IDE setup for go development.
Sorry, I forgot about this. I’ve attached my full configuration at the end. The steps are:
docker exec --privileged -it container_name bash.--privilegedis required to make delve work. I don’t entirely remember why.-itis something like --interactive and --terminal, it’s what you need to get a proper interactive shell.container_nameis the name of your container.bashcan also beshorpwshor whatever shell your container has (hopefully it has one).dlv attach PID --headless --listen=:2345 --accept-multiclient --api-version=2.PIDis the ID of the process you want to debug. This should be1if you’re debugging the main process of the container.--listen=:2345says to listen on (TCP) port 2345 on all interfaces (0.0.0.0)ssh ${USER}@${SERVER} -NL LOCAL:2345:REMOTE:2345.LOCALis the local IP to listen on, usuallylocalhost. When a process connects to your local IP, it will be forwarded to the remote.REMOTEis the remote IP to connect to, this should be the IP of your container. When a connection is forwarded from your local machine, this is where it is forwarded to. My containers are set up with--net hostso I can uselocalhostasREMOTEbut that’s not the default so you may have to usedocker inspectto figure out your container’s IP.I also included the path substitution configs I use. I generally debug these by pausing the target, clicking on something in the stack trace, seeing what path it tries to load, then adjusting the substitute path so that it loads the correct file.
{ "name": "Attach to a docker container", // Get a shell in the container: `docker exec --privileged -it ${NAME} bash` // Launch delve: `dlv attach 1 --headless --listen=:2345 --accept-multiclient --api-version=2` // Forward the port (if remote): `ssh ${USER}@${SERVER} -NL localhost:2345:localhost:2345` // Then run this debug config "presentation": { "group": "99-Miscellaneous", }, "type": "go", "request": "attach", "mode": "remote", "remotePath": "${workspaceFolder}", "port": 2345, "host": "127.0.0.1", "substitutePath": [ // // Full paths (GitLab Docker build) // { // "to": "/go/", // "from": "${env:HOME}/go/", // <-- MODIFY THIS if you're not using the default GOPATH // }, // { // "to": "/root/", // "from": "${workspaceFolder}", // }, // Trimmed paths { "to": "gitlab.com/accumulatenetwork/accumulate/", "from": "${workspaceFolder}/", }, { "to": "github.com/AccumulateNetwork/", "from": "${env:HOME}/go/pkg/mod/github.com/!accumulate!network/", // <-- MODIFY THIS if you're not using the default GOPATH }, // { // "to": "", // "from": "${env:HOME}/go/pkg/mod/", // <-- MODIFY THIS if you're not using the default GOPATH // }, ], }