如何进行Go程序的打包发布
上一篇,我们已经用GoLand开发了第一个程序Hello Kitty,接下去,我们将完成Go程序的打包发布。
执行:
go build -x main.go
go build 和 go run 在编译过程中其实是差不多的,不同之处是 go build 会生成编译好二进制文件并删掉编译过程产生的临时目录。若没有-o 指定文件名,则和当前目录名一致。
常用参数:
| 参数名 | 格式 | 含义 |
|---|---|---|
| -o | -o file | 指定编译后二进制文件名 |
| -a | -a | 强制重新编译涉及的依赖 |
| -s | -s | 省略符号表并调试信息 |
| -w | -w | 省略 DWARF 符号表 |
| -p | -p | 指定编译过程中的并发数,默认为CPU数 |
| -work | -work | 设置该参数后不会在程序结束后删掉编译的临时文件,可用于参看编译生成的文件 |
| -n | -n | 加上该参数可以查看编译的过程,但不会继续执行编译后的二进制文件 |
| -x | -x | 加上该参数可以查看编译的过程,会继续执行编译后的二进制文件 |
编译后文件体积过大解决方案 ,默认生成1.87M 的包main.exe。
优化方案
第一步:编译优化,说明:会去除 DWARF调试信息、符号信息
go build -ldflags "-s -w" main.go
变小了好多 只有1.27mb,但是要注意:
- -s 去掉符号表(这样 panic 时,stack trace 就没有任何文件名/行号信息了,这等价于普通C/C+=程序被strip的效果)
- -w 去掉 DWARF 调试信息,得到的程序就不能用 gdb 调试了
两个可以分开使用,实际项目中不建议做这些处理,多费点空间也没关系。
第二步:压缩优化
安装 UPX,并使用 最高级别的压缩
下载地址:https://github.com/upx/upx/releases,复制upx.exe到应用的当前目录下
执行命令:
.\upx.exe -9 main.exe
.\upx.exe -9 main.exeUltimate Packer for eXecutablesCopyright (C) 1996 - 2023
UPX 4.2.1 Markus Oberhumer, Laszlo Molnar & John Reiser Nov 1st 2023File size Ratio Format Name-------------------- ------ ----------- -----------1339392 -> 531456 39.68% win64/pe main.exe Packed 1 file.
包体缩小到了519 KB
笔者从 1.87M → 1.27MB → 519 KB
总结
本文主要讲述了如何打包,如何对包体大小进行优化,下一篇,我们将讲述下GO模块引入指令Go Mod
参考:
Go - run、build、install 编译详解
猫轻王的博客Golang 专栏
相关文章:
如何进行Go程序的打包发布
上一篇,我们已经用GoLand开发了第一个程序Hello Kitty,接下去,我们将完成Go程序的打包发布。 执行: go build -x main.gogo build 和 go run 在编译过程中其实是差不多的,不同之处是 go build 会生成编译好二进制文件并删掉编译…...
python工具HIKVISION视频编码设备接入网关任意文件下载
python工具 构造payload /serverLog/downFile.php?fileName../web/html/serverLog/downFile.php漏洞证明 文笔生疏,措辞浅薄,望各位大佬不吝赐教,万分感谢。 免责声明:由于传播或利用此文所提供的信息、技术或方法而造成的任何…...
[NLP] 使用Llama.cpp和LangChain在CPU上使用大模型
一 准备工作 下面是构建这个应用程序时将使用的软件工具: 1.Llama-cpp-python 下载llama-cpp, llama-cpp-python [NLP] Llama2模型运行在Mac机器-CSDN博客 2、LangChain LangChain是一个提供了一组广泛的集成和数据连接器,允许我们链接和编排不同的模块。可以常…...
开发知识点-Ant-Design-Vue
Ant-Design-Vue a-input a-input Vue组件 a-spin 加载中的效果 data字段 mounted钩子函数 Ant Design Vue 组件库 list-type“picture-card” 上传的图片作为卡片展示 name show-upload-list action :beforeUpload“handleBeforeUpload” :headers“customHeaders” :disabl…...
2022最新版-李宏毅机器学习深度学习课程-P50 BERT的预训练和微调
模型输入无标签文本(Text without annotation),通过消耗大量计算资源预训练(Pre-train)得到一个可以读懂文本的模型,在遇到有监督的任务是微调(Fine-tune)即可。 最具代表性是BERT&…...
Android codec2 视频框架 之输入buffer
文章目录 输入端的内存管理输入数据包buffer结构体的转换 主要的流程如上, 申请内存在CCodecBufferChannel,申请之后回调到MediaCodec。然后应用从MediaCodec获取 将解码数据放到buffer中,CCodecBufferChannel在将这块buffer 送到componet模块…...
Python实现局部二进制算法(LBP)
1.介绍 局部二进制算法是一种用于获取图像纹理的算法。这算法可以应用于人脸识别、纹理分类、工业检测、遥感图像分析、动态纹理识别等领域。 2.示例 """ 局部二进制算法,计算图像纹理特征 """ import cv2 import numpy as np imp…...
如何评价现在的CSGO游戏搬砖市场
如何评价现在的csgo市场? 其实整个搬砖市场,现在已经变得乌烟瘴气,散发着“恶臭”。我个人非常鄙视那些虚有其表,大小通吃的做法,那些甚至连搬砖数据都看不懂的人,也出来吹嘘着“实力强大,经验丰…...
ResourceQuota对象在K8s上的说明
ResourceQuota资源对象的说明,以及在集群中的作用说明 定义说明 https://kubernetes.io/zh-cn/docs/concepts/policy/resource-quotas/ 集群中的资源组的划分和设计 在具有 32 GiB 内存和 16 核 CPU 资源的集群中,允许 A 团队使用 20 GiB 内存 和 10 核…...
悟空crm二次开发 增加客户保护功能 (很久没有消息,但是有觉得有机会的客户)就进入了保护转态
需求:客户信息录入不限数量,但是录入的信息1个月内只有自己和部门领导能看到,如果1个月内未成交或者未转移至自己的客保 则掉入公海所有人可见,这里所说的客保就是现在系统自带的客保 1、需求思维导图 2、新增保护按钮 3、点击该…...
k8s之配置资源管理
一,secret Secret 是用来保存密码、token、密钥等敏感数据的 k8s 资源,这类数据虽然也可以存放在 Pod 或者镜像中,但是放在 Secret 中是为了更方便的控制如何使用数据,并减少暴露的风险。 有三种类型: 1,k…...
赛氪助力全国大学生数学竞赛山东赛区圆满举办
近日,全国大学生数学竞赛山东赛区比赛有序进行,赛氪已连续6年助力本项赛事蓬勃发展。在中国高等教育学会高校竞赛评估与管理体系研究专家工作组发布的《2022全国普通高校大学生竞赛分析报告》中,本赛事荣登观察目录。 全国大学生数学竞赛旨在…...
pytorch基础语法问题
这里写目录标题 pytorch基础语法问题shapetorch.ones_like函数和torch.zeros_like函数y.backward(torch.ones_like(x), retain_graphTrue)torch.autograd.backward参数grad_tensors: z.backward(torch.ones_like(x))来个复杂例子z.backward(torch.Tensor([[1., 0]])更复杂例子实…...
【面试经典150 | 】颠倒二进制位
文章目录 写在前面Tag题目来源题目解读解题思路方法一:逐位颠倒方法二:分治 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为主,并附带一些对于…...
十分钟了解自动化测试
自动化测试 自动化测试的定义:使用一种自动化测试工具来验证各种软件测试的需求,它包括测试活动的管理与实施、测试脚本的开发与执行。 自动化测试只是测试工作的一部分,是对手工测试的一种补充; 自动化测试绝不能代替手工测试;多数情况下&…...
Redis配置文件
Redis可以在没有配置文件的情况下使用内置的默认配置启动,但是这种设置仅推荐用于测试和开发。 配置Redis的正确方法是提供一个Redis配置文件,通常称为 redis.conf 。 通过命令行传递参数启动 你也可以直接使用命令行传递Redis配置参数。这对于测试非…...
[量化投资-学习笔记009]Python+TDengine从零开始搭建量化分析平台-KDJ
技术分析有点像烹饪,收盘价、最值、成交量等是食材;均值,移动平均,方差等是烹饪方法。随意组合一下就是一个技术指标。 KDJ又称随机指标(随机这个名字起的很好)。KDJ的计算依据是最高价、最低价和收盘价。…...
Activiti6工作流引擎:Form表单
表单约等于流程变量。StartEvent 有一个Form属性,用于关联流程中涉及到的业务数据。 一:内置表单 每个节点都可以有不同的表单属性。 1.1 获取开始节点对应的表单 Autowired private FormService formService;Test void delopyProcess() {ProcessEngi…...
Fortran 中的指针
Fortran 中的指针 指针可以看作一种数据类型 指针存储与之关联的数据的内存地址变量指针:指向变量数组指针:指向数组过程指针:指向函数或子程序指针状态 未定义未关联 integer, pointer::p1>null() !或者 nullify(p1) 已关联 指针操作 指…...
第七章 块为结构建模 P4|系统建模语言SysML实用指南学习
仅供个人学习记录 这部分感觉很模糊,理解的不好,后面的图也没画了,用到的时候再来翻书 应用端口实现接口建模 端口port表示了块边界上的一个访问点,也可以是由该块分类的任何组成或引用边界上的可访问点。一个块可以有多个端口规…...
航模老鸟的私藏笔记:SBUS协议高速/普通模式选择与失控保护(Flags位)实战配置指南
航模老鸟的私藏笔记:SBUS协议高速/普通模式选择与失控保护实战配置指南 穿越机在高速俯冲时突然失去遥控信号,眼睁睁看着设备撞向地面;固定翼在千米高空因信号干扰进入不可控状态...这些惊心动魄的场景,往往源于对SBUS协议底层配置…...
从Datasheet到Allegro可生产封装:一个硬件工程师的标准化建库自查清单
从Datasheet到Allegro可生产封装:一个硬件工程师的标准化建库自查清单 在硬件设计领域,封装库的质量直接影响着PCB设计的效率和生产良率。一个优秀的封装库不仅是符号和焊盘的简单组合,更是设计意图与生产工艺的精确桥梁。本文将分享一套经过…...
ESP32 OTA升级实战:从官方native_ota_example到自定义固件服务器的完整配置指南
ESP32 OTA升级实战:从官方示例到生产级部署的进阶指南 当你的ESP32设备部署在远程现场,每次更新固件都要派人去现场烧录?这种低效方式早已过时。OTA(Over-The-Air)技术让设备像智能手机一样远程更新,而ESP3…...
PHP = 分配文件描述符 (FD)?
PHP 是“申请者”,操作系统内核才是“分配者”。** PHP 无法直接创建或分配文件描述符 (FD)。它只能通过调用标准库函数(如 fopen, curl_init, socket_create),向操作系统发起系统调用 (System Call),请求内核分配一个…...
如何让10美元鼠标超越苹果触控板?Mac Mouse Fix终极指南
如何让10美元鼠标超越苹果触控板?Mac Mouse Fix终极指南 【免费下载链接】mac-mouse-fix Mac Mouse Fix - Make Your $10 Mouse Better Than an Apple Trackpad! 项目地址: https://gitcode.com/GitHub_Trending/ma/mac-mouse-fix 还在为macOS上鼠标体验不佳…...
从一次线上慢查询排查说起:我是如何通过深挖MySQL的MUL索引,把接口响应时间从2秒降到200毫秒的
从一次线上慢查询排查说起:我是如何通过深挖MySQL的MUL索引,把接口响应时间从2秒降到200毫秒的 那天下午,监控系统突然报警,订单列表接口的P99响应时间突破了2秒——这比平时的200毫秒慢了整整10倍。作为一个日活百万的电商平台&a…...
VAP跨平台特效动画引擎:解决复杂动画性能瓶颈的终极方案
VAP跨平台特效动画引擎:解决复杂动画性能瓶颈的终极方案 【免费下载链接】vap VAP是企鹅电竞开发,用于播放特效动画的实现方案。具有高压缩率、硬件解码等优点。同时支持 iOS,Android,Web 平台。 项目地址: https://gitcode.com/gh_mirrors/va/vap …...
HS2-HF_Patch终极指南:三分钟解决Honey Select 2语言障碍和功能限制
HS2-HF_Patch终极指南:三分钟解决Honey Select 2语言障碍和功能限制 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 如果你是《Honey Select 2》的玩…...
网络安全设计实践
网络安全设计实践:构建数字世界的铜墙铁壁 在数字化浪潮席卷全球的今天,网络安全已成为企业、政府乃至个人不可忽视的核心议题。从数据泄露到勒索软件攻击,网络威胁的复杂性和频率逐年攀升。网络安全设计实践正是通过系统性方法,…...
暗黑破坏神2存档编辑器:5分钟掌握D2/D2R角色修改技巧
暗黑破坏神2存档编辑器:5分钟掌握D2/D2R角色修改技巧 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor d2s-editor是一款功能强大的暗黑破坏神2存档修改工具,专为D2和D2R玩家设计。这款基于Web的开源编辑器…...
