跨平台编译go(交叉编译)

news2024/12/24 0:27:56

以将一个简单的go http 部署到docker为例!

方法一:构建service镜像同时拉取go镜像

Dockerfile文件

# alpine Linux发行版,该发行版的大小很小并且内置了Go
FROM golang:alpine

# 设置linux环境变量
ENV GO111MODULE=on \
    CGO_ENABLED=0 \
    GOOS=linux \
    GOARCH=amd64

# 设置镜像内工作目录
WORKDIR /build

# 将代码复制到容器中
COPY . .

# 将代码编译成二进制可执行文件app
RUN go build -o app .

# 移动到用于存放生成的二进制文件的 /dist 目录
WORKDIR /dist

# 将二进制文件从 /build 目录复制到/dist
RUN cp /build/app .

# 暴露端口
EXPOSE 8888

# 启动容器时运行的命令
CMD ["/dist/app"]

构建

  1. docker build . -t goweb_app
  2. docker run -p 8888:8888 goweb_app

方法二:分阶段构建,不保留源码文件和编译器

在最终的镜像中是不需要go编译器的,也就是说只需要一个运行最终二进制文件的容器即可。

FROM golang:alpine AS builder

# 为我们的镜像设置必要的环境变量
ENV GO111MODULE=on \
    CGO_ENABLED=0 \
    GOOS=linux \
    GOARCH=amd64

# 移动到工作目录:/build
WORKDIR /build

# 将代码复制到容器中
COPY . .

# 将我们的代码编译成二进制可执行文件 app
RUN go build -o app .

###################
# 接下来创建一个小镜像
###################
FROM scratch

# 从builder镜像中把/dist/app 拷贝到当前目录
COPY --from=builder /build/app /

# 需要运行的命令
ENTRYPOINT ["/app"]

方法三:本地跨平台编译后,丢到服务器

交叉编译(跨平台编译)

  1. Golang 支持交叉编译,在一个平台上生成另一个平台的可执行程序。
  2. golang中跨平台交叉编译涉及两个重要的环境变量:GOOS 和 GOARCH,分别代表 Target Host OS 和 Target Host ARCH。

比较重要的几个参数

GOARCH="amd64" // 程序构建环境的目标计算架构
GOOS="linux" // 程序构建环境的目标操作系统
CGO_ENABLED="1" // 指明cgo工具是否可用的标识

命令公式

CGO_ENABLED=0 GOOS=${os} GOARCH=${arch} go build -o ${name} main.go

  1. name:编译后app的名称,默认为gomod的包名

  2. os:目标os,大致有如下一堆:
    在这里插入图片描述

  3. arch:架构

    在这里插入图片描述

举例

  1. Mac 下编译 Linux 和 Windows 64位可执行程序:

    CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go​
    CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go
    
  2. Linux 下编译 Mac 和 Windows 64位可执行程序:

    CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go​
    CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go
    
  3. Windows 下编译 Mac 和 Linux 64位可执行程序:

    CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go​
    CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go
    

提示:如果win命令行提示'CGO_ENABLED' 不是内部或外部命令,也不是可运行的程序 或批处理文件。可以用git bash去编译。

加执行权限,chmod +x web,然后执行,访问页面。(嫌开放端口之类的麻烦就把防火墙禁掉)
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

MyBatis持久层框架详细解读:MyBatis快速入门篇

文章目录1. 前言2. JDBC 存在的缺点3. MyBatis 优化4. MyBatis 快速入门5. 总结Java编程基础教程系列1. 前言 JavaEE 企业级 Java 项目中的经典三层架构为表现层,业务层和持久层,使用Java 代码操作数据库属于持久层内容,而 MyBatis 对 JDBC …

Appmsg:APP辅助分析神器

一、前言 在进行APP渗透测试、APP病毒分析或写APP测试报告时经常会用到APP基本信息,有些工具虽然可以解析APP,但缺少想要的信息,有些解析的结果不够准确,于是只好自研一款工具来解决。 二、定位 主要适用于以APP病毒分析、APP漏…

一个数据驱动的动态 NFT 实现方案

1 背景2022 年是 Web3 行业很不如意的一年,DeFi 旧力已去,游戏和社交应用新力未发,放眼望去,似乎只有 NFT 仍然热度不减,各种应用、各种概念也是层出不穷,几乎是独力支撑熊市当中 Web3 的希望。除了围绕 NF…

【MFC】MFC应用程序流程(11)

在WIN32应用程序中使用MFC于MFC框架创建的应用程序流程基本上一致的,不同之处是对MFC框架的使用。 MFC应用程序流程 应用程序类继承CWinAppEx(类似CWinApp),编译时注入的WinMain函数利用多态机制实现应用程序初始化:…

LaoCat带你认识容器与镜像(番外一【Harbor】)

祝大家开工大吉呀,新的一年要有新的收获呀 ~ 本章内容 搭建Docker镜像私仓Harbor,并配置Docker私仓。 本文实操全部基于Ubuntu 20.04 宿主机 > linux服务器本身 Harbor > 2.5.3 Docker系列文章之仓库篇就介绍了Docker有俩种类型的镜像仓库&#x…

AppShark:一款针对Android应用程序的静态分析与漏洞扫描框架

关于AppShark AppShark是一款针对Android应用程序的安全测试框架,该工具本质上是一个静态污点分析平台,可以用于扫描Android应用程序中的漏洞。 AppShark除了实现行业普遍应用的数据流分析,还将指针分析与数据流分析融合,因而漏…

【项目精选】基于SpringBoot+Vue实现的仿掘金论坛系统(包含完整源码以及部署教程)

项目简介 本论坛基于SpringBootVue框架实现前后端分离,自适应手机端和电脑端,界面简洁美观,功能完善,性能高效。分为用户系统和管理系统两部分。 大厂微服务架构设计;代码简洁、高效无冗余;注释详细易阅读…

LabVIEW 在NI Linux实时设备上访问Shell

LabVIEW 在NI Linux实时设备上访问Shell有一台运行NI Linux实时操作系统的设备,想访问设备上的shell或终端。要使用以下任一方法与设备通信,必须在计算机上安装终端客户端。使用SSH连接:1. 打开电源并将设备连接到网络或直接连接到计算机。2.…

已解决:Linux安装Docker完整过程

① 目的 接口自动化接口需要持续集成,最终选择Jenkins来实现。通过docker来实现安装部署Jenkins ② 环境 Linux ③Docker的自动化安装 Docker官方和国内daocloud都提供了一键安装的脚本,使得Docker的安装更加便捷。 官方的一键安装方式: curl…

C#,索尼偏光相机(Polarization Camera)传感器IMX250和专用SDK简介

以下文字用百度翻译,效果一般,凑合看吧。2018年12月开始上市的索尼偏光相机和偏光相机专用SDK实现了高功能、高画质、高速处理。其要点在于,开发为不在需要专业知识的偏振信号处理的安装中花费工时,能够以最小限度的成本利用的SDK…

逆战成钢!大势智慧2023新春年会暨表彰大典圆满举行

2023年1月14日,大势智慧2023新春年会暨表彰大典如期举行。暂别了疫情的阻隔,大势智慧武汉总部与各分公司成员时隔两年再次迎来“面对面拥抱”。三百多名大势成员群贺新春,共同度过了一次难忘的年会盛典。 逆战成钢 用奋战实现业绩、规模高增…

Flutter 2023 Roadmap 解析

随着 Flutter Forward 大会召开, Flutter 官方在 3.7 版本 之余为我们展示了如 3D 渲染支持、add-to-web 等未来可能出现的 Feature,但是这些都还只是处于开发中,未来可能还会有其他变动,而在大会结束后,官方也公布了更…

【GD32F427开发板试用】基于蓝牙模块的远程点灯演示

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动,更多开发板试用活动请关注极术社区网站。作者:寒冰1988 一. 前言 感谢极术社区联合兆易创新组织的本次活动,很荣幸能够中签本次的试用机会,结合手里的外围模块&…

代码随想录算法训练营第31天 回溯算法 93.复原IP地址 78.子集 90.子集II

文章目录LeetCode 93.复原IP地址题目讲解思路LeetCode 78.子集题目讲解思路LeetCode 90.子集II题目讲解难点总结LeetCode 93.复原IP地址 题目讲解 思路 递归参数 startIndex一定是需要的,因为不能重复分割,记录下一层递归分割的起始位置。 本题我们还…

ubuntu1804搭建svo2.0环境并跑euroc数据集

0说明 整个SVO2.0环境搭建过程按照官网的说明进行(链接:https://github.com/uzh-rpg/rpg_svo_pro_open) 开发环境是ubuntu18.04ROS-Melodic 1工具安装 Install catkin tools and vcstools if you haven’t done so before. Depending on your operating system …

使用这个插件,fiddler抓包直接生成httprunner脚本

har2case可以将.har文件转化成yaml格式或者json格式的httprunner的脚本文件,生成.har格式文件可以借助 fiddler 或 Charles 抓包工具 友情提示: 录制脚本,只是一个过渡,从0到1的一个过渡,如果让你直接写脚本&#xff…

微信app hook修改剪刀石头布以及骰子思路

0x01 前言 该方法很简单,本次记录是为了加深对安卓hook技术的学习,以及进一步熟悉frida和objection的使用,如果只是想需要这个功能,推荐手机root后装微x模块 技术仅供分享,请勿用于非法用途 0x02 环境准备 首先需要准…

linux下更新tomcat版本

进入tomcat目录下查看当前版本号./version.sh2.切忌升级之前一定要备份老版本mkdir tomcat-backup3.拷贝老版本到你创建的文件夹中cp -rf apache-tomcat-9.0.45-stunew/ tomcat-backup/4.下载tomcat安装包,随便你下载什么版本,我这里以68为例官网&#x…

ssm二手废旧塑料回收交易系统的设计与实现

内容是设计并且实现一个废旧塑料交易系统的设计与实现。它是在Windows下,以MYSQL为数据库开发平台,Tomcat网络信息服务作为应用服务器。废旧塑料交易系统的设计与实现的功能已基本实现,主要包括用户、回收站、加工厂、预约信息、收购信息、交…

ARP协议与ARP地址欺骗防护

ARP协议 什么是MAC地址 MAC地址是固化在网卡上的网络标识,由Ieee802标准规定。 什么是广播 向同一个网段内的设备,发送数据包,广播IP地址是同网段最后一个IP地址。 认识ARP协议 ARP的全称是地址解析协议,我们通过ARP协议获取…