当前位置: 首页 > news >正文

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 怎么用?我们下篇见~

相关文章:

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

🧱 一、go build:最基础的构建方式 Go 的构建工具链是出了名的轻量、简洁,直接用 go build 就能把项目编译成二进制文件。 ✅ 构建当前项目 go build -o myapp-o myapp 指定输出文件名默认会构建当前目录下的 main.go 或 package main &a…...

青少年编程与数学 02-015 大学数学知识点 08课题、信息论

青少年编程与数学 02-015 大学数学知识点 08课题、信息论 一、信息论基础二、熵与信息量三、信源编码四、信道编码五、率失真理论六、信息论的应用七、网络信息论八、信息论与统计学习九、量子信息论十、信息论的前沿研究总结 信息论是研究信息传输、存储和处理的数学理论&…...

【已解决】Webstorm 每次使用 git pull/push 都要输入令牌/密码登录

解决办法:勾上【使用凭据帮助程序】(英文:Use credential helper)...

FreeRTOS:嵌入式实时操作系统的轻量化解决方案

一、FreeRTOS 的核心定位 FreeRTOS(Free Real-Time Operating System)是一款专为微控制器及资源受限的嵌入式设备设计的开源实时操作系统内核。自2003年由Richard Barry发布以来,其以轻量化、高实时性、低资源占用的特点,成为物…...

Linux操作系统 4.Linux实用操作

一、各类小技巧(快捷键) 强制停止 退出、登出 历史命令搜索 光标移动 1.CTRL C 强制停止 1.Linux某些程序的运行,如果想要强行停止它,可以使用ctrlc 2.命令输入错误,也可以通过快捷键ctrl c,退出当前输入&#xff0…...

学透Spring Boot — 010. 单元测试和Spring Test

系列文章目录 这是CSDN postnull 博客《学透Spring Boot》系列的一篇,更多文章请移步:Postnull - 学透Spring Boot系列文章 文章目录 系列文章目录前言1. 基本概念UT 单元测试TDD 测试驱动开发UT测试框架Mock框架 3. Spring Test为什么要用Spring Test引…...

Perl语言的文件系统

Perl语言中的文件系统操作 引言 在软件开发中,文件系统操作是一个不可或缺的部分。无论是简单的文件读取、写入,还是复杂的文件管理,合理的文件系统操作都能极大提升程序的效率和可维护性。Perl语言是一种强大的文本处理语言,凭…...

ffmpeg基础指令学习

文章目录 1. **基本的 FFmpeg 语法**2. **常见的 FFmpeg 基础指令****1. 转换视频格式****2. 视频剪切****3. 转换视频的编码****4. 提取音频****5. 改变视频分辨率****6. 改变音视频的比特率****7. 合并音视频****8. 提取视频中的一帧图片****9. 提取视频的帧速率(…...

英国电商物流变革:ebay私人卖家如何借势简易配送提升履约效率?

近年来,英国电商物流正在经历一场不小的变革。从“等待5-7个工作日”到如今“次日达”成为常态,市场和用户对配送效率的要求越来越高。对于在 eBay 平台上的私人卖家来说,这既是挑战,也是机会。如何用有限的资源跟上平台和消费者对…...

第15周:注意力汇聚:Nadaraya-Watson 核回归

注意力汇聚:Nadaraya-Watson 核回归 Nadaraya-Watson 核回归是一个经典的注意力机制模型,它展示了如何通过注意力权重来对输入数据进行加权平均。以下是该内容的核心总结: 关键概念 注意力机制框架:由查询(自主提示…...

批量图片文本识别重命名,批量ocr识别图片重命名,基于WPF和腾讯OCR云部署实,现批量对图片局部提取文字后重命名的操作详细步骤

​​1. 项目背景​​ 在日常工作中,我们经常需要处理大量图片文件,这些图片可能包含重要的文字信息。为了提高工作效率,我们需要一种自动化的方式,从图片中提取文字,并根据提取的文字对图片进行重命名。 本项目基于 ​​WPF​​ 框架开发桌面应用程序,结合 ​​腾讯 OCR…...

26考研——排序(8)

408答疑 文章目录 一、排序的基本概念二、插入排序三、交换排序四、选择排序五、归并排序、基数排序和计数排序六、排序的代码实操七、各种内部排序算法的比较及应用八、外部排序九、参考资料鲍鱼科技课件26王道考研书 十、总结基本排序算法希尔排序快速排序、堆排序和归并排序…...

KUKA机器人导入设备说明文件

KUKA机器人在应用中需要进行通讯配置,通讯前需要导入设备说明文件,比如常用的倍福设备说明文件。在Workvisual软件上通过以下步骤即可导入设备说明文件。 一、打开Workvisual软件,在选项卡【File】下找到【Import/Export】输入/输出并点击打…...

ssl.SSLCertVerificationError报错解决方案

这个错误 ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate 指出 Python 在尝试建立安全的 HTTPS 连接时,无法验证远程服务器(在此案例中是 GitHub 或 Hugging Face…...

drawio导出流程图为白色背景png图片

draw.io 操作路径: 1.纯白背景图片(一般导出流程图就这种纯白背景,看自己需求 什么都不勾选 导出效果图 2.田字格白背景 只勾选网格 导出效果图 3.方块背景 只勾选背景 导出效果图 4.大方块背景 都勾选 导出效果图...

【Linux】——手撕线程池、简易线程池

前言 在现代计算机编程领域,随着多核处理器和分布式系统的广泛应用,并发编程变得越来越重要。而线程作为实现并发的基本手段之一,其重要性不言而喻。然而,在实际的应用开发中,如何高效地管理和调度线程,以充…...

使用mcp自定义编写mcp tool,使用 conda 启动,在cline中配置使用

自定义 mcp tool 例子 ## /langchain_learn/mcp学习/base_mcp_tool_study2.py # 导入必要模块 import os from typing import Optional from mcp.server.fastmcp import FastMCP# 初始化 MCP 服务器实例,指定服务器名称和版本 mcp_server FastMCP(name"DemoS…...

OpenEuler/CentOS一键部署OpenGauss数据库教程(脚本+视频)

📌OpenEuler/CentOS一键安装OpenGauss数据库教程 为什么需要OpenGauss一键安装脚本? 手动部署OpenGauss数据库时,环境适配、依赖冲突等问题常让开发者头疼。尤其对新人而言,官方文档的配置步骤可能耗时数小时甚至引发未知报错。 …...

python如何快速删除文件夹中的大量文件

在 Python 中,删除文件夹中的大量小图片文件可以通过使用 os 模块或 shutil 模块来实现。以下是一个示例代码,展示了如何快速删除指定文件夹中的所有文件。如果你只需要删除小图片文件,可以添加额外的逻辑来检查文件大小。 以下是一个示例代…...

【mongodb】MongoDB的应用场景

目录 1.说明2.内容管理系统(CMS)2.1 场景描述2.2 MongoDB优势2.3 示例 3.实时分析与大数据3.1 场景描述3.2 MongoDB优势3.3 示例 4.移动应用后端4.1 场景描述4.2 MongoDB优势4.3 示例 5.游戏开发5.1 场景描述5.2 MongoDB优势5.3 示例 6.电子商务平台6.1 …...

使用 Swift 实现 LRU 缓存淘汰策略

📌 实现思路 一、核心目标 我们要实现一个缓存类: 支持通过 get(key) 获取缓存的值;支持通过 put(key, value) 写入缓存;缓存容量有限,当超过容量时要淘汰最久未使用的元素。 二、为什么用「哈希表 双向链表」 功…...

【面试篇】Dubbo

基础概念 问题:请简要介绍一下 Dubbo 是什么,它的主要用途是什么?答案:Dubbo 是阿里巴巴开源的高性能、轻量级的分布式服务框架,它致力于提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案…...

01-STM32(介绍、工具准备、新建工程)p1-4

文章目录 工具准备和介绍硬件设备stm32简介和arm简介stm32简介STM32命名规则STM32选型STM32F103C8T6最小系统板引脚定义STM32启动配置STM32最小系统电路ARM简介 软件安装注册器件支持包安装ST-LINK驱动安装USB转串口驱动 新建工程创建stm32工程STM32工程编译和下载型号分类及缩…...

关于termux运行pc交叉编译的aarch64 elf的问题

在Linux系统上交叉编译Nim程序到Android Termux环境需要特殊处理,以下是详细的解决方案: 问题根源分析 ​​ABI不兼容​​ Android使用bionic libc而非标准glibc,直接编译的Linux ARM二进制无法直接运行 ​​动态链接错误​​ 默认编译会链…...

Ansible Playbook 进阶探秘:Handlers、变量、循环及条件判断全解析

192.168.60.100ansible.com192.168.60.110 client-1.com 192.168.60.120client-2.com192.168.60.130client-1.com 一、Handlers 介绍:在发生改变时执行的操作(类似puppet通知机制) 示例: 当apache的配置文件发生改变时,apache服务才会重启…...

解决GraalVM Native Maven Plugin错误:JAVA_HOME未指向GraalVM Distribution

目录 问题描述解决方案为什么需要这样配置? 问题描述 在你的项目中,如果你遇到了以下错误信息: [ERROR] Failed to execute goal org.graalvm.buildtools:native-maven-plugin:0.10.5:test (native-test) on project DIctSystemInJavaUsing…...

006贪心——算法备赛

跨步问题 跳跃游戏|| 问题描述 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向后跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i]i j &…...

Hyperlane:高性能 Rust HTTP 服务器框架评测

Hyperlane&#xff1a;高性能 Rust HTTP 服务器框架评测 在当今快速发展的互联网时代&#xff0c;选择一个高效、可靠的 HTTP 服务器框架对于开发者来说至关重要。最近&#xff0c;我在评估各种服务器框架性能时&#xff0c;发现了一个名为 Hyperlane 的 Rust HTTP 服务器库&a…...

解锁多元养生密码,开启活力生活

在车水马龙、节奏飞快的现代社会&#xff0c;亚健康像阴霾一样&#xff0c;笼罩着不少人的生活。不少上班族长期久坐&#xff0c;肩颈酸痛&#xff1b;有的人作息混乱&#xff0c;皮肤状态差。想要驱散这些健康阴霾&#xff0c;拥抱活力生活&#xff0c;不妨解锁下面这些多元养…...

如何安全地访问AWS

如何安全地访问AWS 推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 如何安全地访问AWS当可以使用AWS Organizations & IAM Identity Center时理想的访问方式补充:什么是IAM IIC…...

机器视觉工程师的专业精度决定职业高度,而专注密度决定成长速度。低质量的合群,不如高质量独处

在机器视觉行业&#xff0c;真正的技术突破往往诞生于深度思考与有效碰撞的辩证统一。建议采用「70%高质量独处30%精准社交」的钻石结构&#xff0c;构建可验证的技术能力护城河。记住&#xff1a;你的专业精度决定职业高度&#xff0c;而专注密度决定成长速度。 作为机器视觉工…...

Linux的 `sysctl` 命令 笔记250404

Linux的 sysctl 命令 笔记250404 sysctl 是 Linux 系统中用于 动态查看和修改内核运行时参数 的核心工具。它通过 /proc/sys/ 目录的虚拟文件系统接口&#xff0c;允许用户在不重启系统的前提下调整内核行为&#xff0c;涵盖网络、内存、文件系统等关键功能。 &#x1f4dc; 核…...

prism WPF 导航

导航和浏览器的后退前进是一样的功能 项目结构 App.xaml.cs using Prism.Ioc; using Prism.Modularity; using Prism.Unity; using PrismWpfApp.ViewModels; using PrismWpfApp.Views; using System; using System.Collections.Generic; using System.Configuration; using S…...

Pytorch实现线性分类

目录 1.导包 2.加载数据 3.获取X与Y数据 4.将X&#xff0c;Y数据转化成tensor张量, tensor张量必须是二维数据 5.用封装的API实现线性分类 5.1导包 5.2建模-神经网络&#xff08;二分类问题&#xff09; 5.3定义损失函数 5.4定义优化器 5.5定义训练过程 5.6 计算正确…...

使用人工智能大模型kimi,如何免费高效制作PPT?

今天我们学习人工智能大模型kimi&#xff0c;如何免费协助我们做班会PPT。 免费手把手讲解视频&#xff0c;请访问 https://edu.csdn.net/learn/40402/666417 第一步使用谷歌浏览器&#xff0c;搜索Kimi&#xff0c;看到Kimi智能助手&#xff0c;点击&#xff0c;在Kimi对话框…...

YOLO学习笔记 | 基于YOLO与光流融合的车牌识别方法研究(附Matlab代码)

🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓 基于YOLO与光流融合的车牌识别方法研究 🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓 摘要 针对动态场景下车牌识别易受运动模糊影响的问题,提出结合YOLO目标检测与Lucas-Kanade…...

leetcode 数组总结篇

基础理论 数组&#xff1a;下标时从 0 开始的&#xff0c;地址是连续的&#xff0c;不能删除&#xff0c;只能覆盖&#xff1b;数组的实现&#xff1a;vector动态数组 常用操作 头文件 #include <iostream> #include <vector> #include <cstdint> // IN…...

CCF GESP C++编程 四级认证真题 2025年3月

C 四级 2025 年 03 月 题号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 答案 A B B D D C D D B B B B A A C 1 单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09; 第 1 题 关于下述代码&#xff0c;说法错误的是&#xff08; &#xff09;。 int multiply(int x, int …...

元宇宙浪潮下,前端开发如何“乘风破浪”?

一、元宇宙对前端开发的新要求 元宇宙的兴起&#xff0c;为前端开发领域带来了全新的挑战与机遇。元宇宙作为一个高度集成、多维互动的虚拟世界&#xff0c;要求前端开发不仅具备传统网页开发的能力&#xff0c;还需要掌握虚拟现实&#xff08;VR&#xff09;、增强现实&#…...

室内指路机器人是否支持环境监测功能?

并非所有室内指路机器人都具备环境监测功能。那些支持环境监测的室内指路机器人&#xff0c;往往在设计上进行了针对性的优化&#xff0c;搭载了一系列先进且实用的传感器。温湿度传感器犹如一位敏锐的 “温度湿度侦探”&#xff0c;时刻精准地监测室内温度与湿度&#xff0c;为…...

redis的数据类型(1)

https://redis.io/docs/latest/develop/data-types/strings/ 社区版支持&#xff1a; String&#xff0c;字符串 Hash&#xff0c;key-value格式 List&#xff0c;根据插入顺序排序 Set&#xff0c;集合 Sorted set&#xff0c;有排序 Stream&#xff0c; Bitmap&#xff0c; …...

模运算核心性质与算法应用:从数学原理到编程实践

目录 &#x1f680;前言&#x1f31f;数学性质&#xff1a;模运算的理论基石&#x1f4af;基本定义&#xff1a;余数的本质&#x1f4af;四则运算规则&#xff1a;保持同余性的关键 &#x1f99c;编程实践&#xff1a;模运算的工程化技巧&#x1f4af;避免数值溢出&#xff1a;…...

使用 Messenger 跨进程通讯

在Android中使用Messenger进行跨进程通信&#xff08;IPC&#xff09;的步骤如下&#xff1a; 1. 服务端&#xff08;Service&#xff09;实现 1.1 创建Service并绑定Messenger public class MessengerService extends Service {private static final String TAG "Mess…...

css炫酷的3D水波纹文字效果实现详解

炫酷的3D水波纹文字效果实现详解 这里写目录标题 炫酷的3D水波纹文字效果实现详解项目概述技术栈核心实现1. 基础布局2. 渐变背景3. 文字效果实现3.1 基础样式3.2 文字漂浮动画 4. 水波纹效果4.1 模糊效果4.2 水波动画 5. 交互效果 技术要点项目难点与解决方案总结 项目概述 在…...

C++类的特殊成员函数:构造、拷贝构造与析构函数详解

目录 ​编辑一、构造函数 二、拷贝构造函数 三、析构函数 在C 编程中&#xff0c;类的特殊成员函数扮演着至关重要的角色&#xff0c;它们负责对象的创建、复制以及销毁过程。本文将深入探讨构造函数、拷贝构造函数和析构函数的概念、特性及应用场景&#xff0c;并结合代…...

ffmpeg常见命令3

文章目录 1. **文字水印&#xff08;Text Watermark&#xff09;**示例命令&#xff1a;更多选项&#xff1a; 2. **图片水印&#xff08;Image Watermark&#xff09;**示例命令&#xff1a;更多选项&#xff1a; 3. **画中画&#xff08;Picture-in-Picture, PIP&#xff09;…...

C# 中创建统一 API 接口实现方案

在 C# 中创建统一 API 接口需要从架构设计、技术选型和代码实现等多个层面进行规划。以下是详细的实现方案和完整示例代码&#xff1a; 一、技术选型与架构设计 框架选择 ASP.NET Core (6.0)RESTful API 规范 核心组件 统一响应格式&#xff1a;标准化 JSON 响应结构全局异常处…...

考研单词笔记 2025.04.04

accord n一致&#xff0c;符合&#xff0c;协议&#xff0c;条约v与…一致符合&#xff0c;给予&#xff0c;赠予 align v使一致&#xff0c;使对齐 alike a相同的&#xff0c;相似的ad相同地&#xff0c;相似地&#xff0c;同等地 analogous a类似的&#xff0c;相似的 co…...

leetcode 代码随想录 数组-区间和

题目 给定一个整数数组 Array&#xff0c;请计算该数组在每个指定区间内元素的总和。 输入&#xff1a; 第一行输入&#xff1a;为整数数组 Array 的长度 n&#xff0c;接下来 n 行&#xff0c;每行一个整数&#xff0c;表示数组的元素。随后的输入为需要计算总和的区间&…...

Linux学习笔记7:关于i.MX6ULL主频与时钟配置原理详解

以下是关于正点原子B站课程中 i.MX6ULL主频和时钟配置实验的博客内容框架与详细解析&#xff0c;结合实验原理、配置流程及关键代码实现&#xff0c;适合嵌入式开发者参考学习&#xff1a; 一、 实验背景 i.MX6ULL默认启动时由内部BootROM将主频设置为396MHz&#xff0c;但其…...