首页 > 后端开发 > Golang > 在 Docker 容器内实时重新加载和调试 Go 应用程序

在 Docker 容器内实时重新加载和调试 Go 应用程序

Barbara Streisand
发布: 2025-01-27 02:09:09
原创
718 人浏览过

Live-Reload and Debugging Go Applications Within a Docker Container

>本指南演示了设置docker容器中的GO应用程序的实时重载和调试,以镜像Node.js开发工作流程。 虽然此特定GO设置的在线资源很少,但这种方法将一致的Docker环境的好处与实时重载的效率和调试的力量相结合。

>

密钥差异: live-realoading在代码更改上重新启动应用程序; >热重载

修补了不重新启动的内存。调试,对于有效开发至关重要,超过了基于日志的故障排除。 Docker确保跨环境的应用程序行为一致。 >

>环境:

本指南使用Windows 11带有WSL(Windows子系统的Linux),但适用于Linux(相同的步骤)和MACOS(相似)。 强烈建议Windows Go开发WSL,因为它的速度与本机Windows File System相比。 技术堆栈:

  • > docker:提供了一个一致且孤立的开发环境。
  • >
  • >空气:>一个轻巧的GO工具,用于实时填充。 Nodemon或Inotify-Tool等替代方案不是特定的。
  • >
  • delve:强大的GO调试器与诸如VS代码之类的IDE集成。>
目标是自动化服务器重新启动代码更改,以及IDE内的完整调试功能。

Golang Server(光纤示例):

> 创建

main.go>用

<code class="language-go">package main

import "github.com/gofiber/fiber/v2"

func main() {
    app := fiber.New()

    app.Get("/", func(c *fiber.Ctx) error {
        str := "Hello, World!"
        return c.SendString(str)
    })

    app.Listen(":3000")
}</code>
登录后复制
对此进行测试

go run .> docker设置(

):

docker-compose.yml

:指定Dockerfile位置。
<code class="language-yaml">api:
    build:
      context: ./api
      dockerfile: Dockerfile
    ports:
      - '3000:3000'
      - '2345:2345'
    stop_grace_period: 0.1s
    volumes:
      - ./api:/app
    networks:
      - internal</code>
登录后复制
>
  • :露出端口3000(Web服务器)和2345(调试器)。build.context
  • :将本地ports目录安装到容器中。
  • volumesapi> dockerfile(/app):
>

api/Dockerfile空气和delve配置():

>
<code class="language-dockerfile">FROM golang:1.23.2-alpine3.20
WORKDIR /app
RUN go install github.com/go-delve/delve/cmd/dlv@latest
RUN go install github.com/air-verse/air@latest
COPY go.mod go.sum ./
RUN go mod download
USER root # For development only
EXPOSE 2345
EXPOSE 3000
CMD ["air", "-c", "air.toml"]</code>
登录后复制

这将配置空气使用Delve启用了启用调试的应用程序。 在 api/air.toml此配置VS代码以连接到Docker容器中运行的Delve调试器。 调整以匹配您的项目的路径。

<code class="language-toml">root = "."
tmp_dir = "tmp"

[build]
full_bin = "dlv debug --build-flags=\"-gcflags='all=-N -l'\" --listen 0.0.0.0:2345 --headless --continue --accept-multiclient --output=dist/debug"</code>
登录后复制
这个完整的设置可以在Docker容器中进行实时重载和调试,以进行有效的GO开发。请记住在设置所有文件后运行

>

以上是在 Docker 容器内实时重新加载和调试 Go 应用程序的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板