Go语言-初学者日记(八):构建、部署与 Docker 化

🧱 一、go build:最基础的构建方式

Go 的构建工具链是出了名的轻量、简洁,直接用 go build 就能把项目编译成二进制文件。

✅ 构建当前项目
go build -o myapp
  • -o myapp 指定输出文件名
  • 默认会构建当前目录下的 main.gopackage main
🌍 跨平台构建(Go 天然支持)

只需设置两个环境变量:

GOOS=linux GOARCH=amd64 go build -o myapp-linux
GOOS=windows GOARCH=amd64 go build -o myapp.exe

💡 无需在目标平台构建,只要设置环境变量即可构建不同系统的二进制!


📦 二、目录瘦身:只保留运行必需品

部署不等于打包整个项目,一般只需要这几样核心文件:

/dist
├── myapp            # 可执行文件
├── config.yaml      # 配置文件
└── static/          # 静态资源目录(可选)

不要把源码、测试代码、.git 目录一起打包上服务器!


🔐 三、环境变量与配置文件

配置管理是 Go 项目部署的重点:

✅ 使用环境变量(推荐做法)
import "os"port := os.Getenv("APP_PORT")

通常会结合 .env 文件:

APP_PORT=8080
APP_DEBUG=true

使用 godotenv 读取:

go get github.com/joho/godotenv
_ = godotenv.Load(".env")

💬 在开发环境用 .env,上线时直接通过系统环境变量注入,更加安全。


🐳 四、使用 Docker 打包运行

现代应用部署,Docker 是首选。我们来写一个标准的 多阶段构建 Dockerfile

🛠️ Dockerfile
FROM golang:1.21-alpine as builder
WORKDIR /app
COPY . .
RUN go build -o mainFROM alpine
WORKDIR /root/
COPY --from=builder /app/main .
EXPOSE 8080
CMD ["./main"]
🚀 构建与运行
docker build -t my-go-app .
docker run -p 8080:8080 my-go-app

📦 Alpine 非常小巧,只打包了最终可执行文件,极大减小镜像大小。


🗃️ 五、部署方式参考

Go 源码
go build
可执行文件
Docker 镜像
容器运行

方式场景常用工具
本地部署内网环境、开发测试systemd, supervisor
容器部署云平台上线Docker, Podman
集群部署多模块、多服务场景Kubernetes, Helm, k3s

🧠 小贴士:

  • supervisor 可用于守护 Go 应用进程;
  • Docker 可打包应用及依赖;
  • K8s 适用于分布式部署、滚动更新等场景。

📌 小结

  • go build 支持一键构建、跨平台编译
  • ✅ 部署目录要干净,仅保留核心运行文件
  • ✅ 推荐使用环境变量管理配置,godotenv 很好用
  • ✅ Docker 是现代 Go 项目的标配部署方式

🪧 下一篇预告:

📚 Go语言-初学者日记(九):测试与性能分析
单元测试怎么写?性能瓶颈怎么查?pprof 怎么用?我们下篇见~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/74638.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

教程:如何使用 JSON 合并脚本

目录 1. 介绍 2. 使用方法 3. 注意事项 4. 示例 5.完整代码 1. 介绍 该脚本用于将多个 COCO 格式的 JSON 标注文件合并为一个 JSON 文件。COCO 格式常用于目标检测和图像分割任务,包含以下三个主要部分: "images":图像信息&a…

Java学习总结-缓冲流性能分析

测试用例: 分别使用原始的字节流,以及字节缓冲流复制一个很大的视频。 测试步骤: 在这个分析性能需要一个记录时间的工具:这个是记录1970-1-1 00:00:00到现在的总毫秒值。 long start System.currentT…

流影---开源网络流量分析平台(五)(成果展示)

目录 前沿 攻击过程 前沿 前四章我们已经成功安装了流影的各个功能,那么接下来我们就看看这个开源工具的实力,本实验将进行多个攻击手段(ip扫描,端口扫描,sql注入)攻击靶机,来看看流影的态感效…

vs环境中编译osg以及osgQt

1、下载 OpenSceneGraph 获取源代码 您可以通过以下方式获取 OSG 源代码: 官网下载:https://github.com/openscenegraph/OpenSceneGraph/releases 使用 git 克隆: git clone https://github.com/openscenegraph/OpenSceneGraph.git 2、下载必要的第三方依赖库 依赖库 ht…

Unity:标签(tags)

为什么需要Tags? 在游戏开发中,游戏对象(GameObject)数量可能非常多,比如玩家、敌人、子弹等。开发者需要一种简单的方法来区分这些对象,并根据它们的类型执行不同的逻辑。 核心需求: 分类和管…

【C++11】lambda

lambda lambda表达式语法 lambda表达式本质是一个匿名函数对象,跟普通函数不同的是它可以定义在函数内部。lambda表达式语法使用层而言没有类型,所以一般是用auto或者模板参数定义的对象去接收lambda对象。 lambda表达式的格式:[capture-l…

fpga:分秒计时器

任务目标 分秒计数器核心功能:实现从00:00到59:59的循环计数,通过四个七段数码管显示分钟和秒。 复位功能:支持硬件复位,将计数器归零并显示00:00。 启动/暂停控制:通过按键控制计时的启动和暂停。 消抖处理&#…

《UNIX网络编程卷1:套接字联网API》第6章 IO复用:select和poll函数

《UNIX网络编程卷1:套接字联网API》第6章 I/O复用:select和poll函数 6.1 I/O复用的核心价值与适用场景 I/O复用是高并发网络编程的基石,允许单个进程/线程同时监控多个文件描述符(套接字)的状态变化,从而高…

SpringBoot+vue前后端分离整合sa-token(无cookie登录态 详细的登录流程)

SpringBootvue前后端分离整合sa-token(无cookie登录态 & 详细的登录流程) 1.介绍sa-token1.1 框架定位1.2 核心优势 2.如何整合sa-token3.如何进行无cookie模式登录3.1后端3.1.1 VO层3.1.2 Controller层3.1.3 Service层 3.2前端3.2.1 登录按钮自定义…

MYOJ_1171:(洛谷P1075)[NOIP 2012 普及组] 质因数分解(数学相关,质数与约数基础)

题目描述 已知正整数 n 是两个不同的质数的乘积,试求出两者中较大的那个质数。 1≤n≤210^9 输入 输入一个正整数 n。 输出 输出一个正整数 p,即较大的那个质数。 样例输入输出 输入:21 输出:7 思路: 为了节约时间与…

Python语言的测试用例设计

Python语言的测试用例设计 引言 随着软件开发的不断进步,测试在软件开发生命周期中的重要性日益凸显。测试用例设计是软件测试的核心,它为软件系统的验证和验证提供了实施的基础。在Python语言中,由于其简洁明了的语法和强大的内置库&#…

SpringKafka消息消费:@KafkaListener与消费组配置

文章目录 引言一、Spring Kafka消费者基础配置二、KafkaListener注解使用三、消费组配置与负载均衡四、手动提交偏移量五、错误处理与重试机制总结 引言 Apache Kafka作为高吞吐量的分布式消息系统,在大数据处理和微服务架构中扮演着关键角色。Spring Kafka为Java开…

VMware 虚报化Ubuntu 卡成一B,如何接招?

故事背景 Win10 专业版 安装VMware pro ,虚拟化出一个Window10,另一个是UBuntu.自从使用起来去不去就卡死。开始是以为驱动或者升级造成的,重新安装一段时间问题照旧。更气人的这种现象具有不定期性,说不定什么时候就来这么一出。 直接解决方…

cloud项目批量修改主机号

当clone了一个cloud项目后,要把别人的主机号全部改成自己的,非常麻烦 在项目根目录下,启动 Git Bash。在 Git Bash 终端中使用原始的 Unix 命令: find . -type f -exec sed -i s/127\.0\.0\.1/132.168.190.163/g {} 其中127.0.…

微信小程序使用 Vant Weapp 组件库教程

在微信小程序项目中使用 Vant 组件库(Vant Weapp)主要包括以下几个步骤: 1. 初始化项目并安装 Vant Weapp 初始化 npm 在项目根目录下运行以下命令,生成 package.json: npm init -y安装 Vant Weapp 执行以下命令安装 V…

FPGA状态机思想实现流水灯及HDLBits学习

目录 第一章 在DE2-115上用状态机思想实现LED流水灯1.1 状态机设计思路1.2 Verilog代码实现1.3. 仿真测试代码1.4 编译代码与仿真 第二章 CPLD和FPGA芯片的主要技术区别是什么?它们各适用于什么场合?2.1 主要技术区别2.2 适用场合 第三章 HDLBits学习3.1…

与总社团联合会合作啦

2025.4.2日,我社团向总社团联合会与暮光社团发起合作研究“浔川代码编辑器v2.0”。至3日,我社团收到回复: 总社团联合会: 总社团联合会已收到浔川社团官方联合会的申请,经考虑,我们同意与浔川社团官方联合…

Shiro学习(三):shiro整合springboot

一、Shiro整合到Springboot步骤 1、准备SpringBoot 环境,这一步省略 2、引入Shiro 依赖 因为是Web 项目,所以需要引入web 相关依赖 shiro-spring-boot-web-starter,如下所示: 3、准备Realm 因为实例化 ShiroFilterFactoryBean 时…

【图形API】片段着色器自动计算LOD

片段着色器中的自动 LOD 计算详解 在图形渲染中,Level of Detail (LOD) 用于优化纹理采样的性能和视觉质量。片段着色器(Fragment Shader)能够自动计算 LOD,而顶点着色器(Vertex Shader)则不行。以下是详细…

24、 Python Socket编程:从协议解析到多线程实战

Python Socket编程:从协议解析到多线程实战 一、文章概述 本文深入讲解Python网络编程核心技术,涵盖TCP/UDP协议底层原理、Socket API全流程解析、高并发服务端开发实践,以及网络通信中的典型问题解决方案。通过3个递进式代码案例和协议设计…