Golang交叉编译之跨平台编译使用详解

 更新时间:2022年10月07日 11:16:32   作者:微客鸟窝  
这篇文章主要为大家介绍了Golang交叉编译之跨平台编译使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

在CMD命令行中编译

设置Linux编译环境

SET CGO_ENABLED=0
set GOARCH=amd64
set GOOS=linux
//CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=7
// 开始编译
go build -o ./build/ ./main.go
在windows10之前的系统版本上使用cmd命令行可以使用上述命令编译

powershell命令行中

在powershell命令行中编译(示例编译64位linux程序)

// 设置Linux编译环境
$env:CGO_ENABLED="0"
$env:GOOS="linux"
$env:GOARCH="amd64"
// 开始编译
go build -o ./build/ ./main.go

一、CGO_ENABLED

作用:

用于标识(声明) cgo 工具是否可用

意义:

存在交叉编译的情况时,cgo 工具是不可用的。在标准 go 命令的上下文环境中,交叉编译意味着程序构建环境的目标计算架构的标识与程序运行环境的目标计算架构的标识不同,或者程序构建环境的目标操作系统的标识与程序运行环境的目标操作系统的标识不同

关闭 cgo 后,在构建过程中会忽略 cgo 并静态链接所有的依赖库,而开启 cgo 后,方式将转为动态链接

二、GOOS

用于标识(声明)程序构建环境的目标操作系统

如:linux 、windows

三、GOARCH

用于标识(声明)程序构建环境的目标计算架构,若不设置,默认值与程序运行环境的目标计算架构一致

系统GOOSGOARCH
Windows 32 位windows386
Windows 64 位windowsamd64
OS X 32 位darwin386
OS X 64 位darwinamd64
Linux 32 位linux386
Linux 64 位linuxamd64

四、GOHOSTOS

用于标识(声明)程序运行环境的目标操作系统

五、GOHOSTARCH

用于标识(声明)程序运行环境的目标计算架构

六、go build

  • -a 强制重新编译,简单来说,就是不利用缓存或已编译好的部分文件,直接所有包都是最新的代码重新编译和关联
  • -installsuffix
  • 作用:在软件包安装的目录中增加后缀标识,以保持输出与默认版本分开
  • 补充:如果使用 -race 标识,则后缀就会默认设置为 -race 标识,用于区别 race 和普通的版本
  • -o 指定编译后的可执行文件名称

后台运行

//修改权限命令
chmod 777 程序名称
//后台运行的命令
nohup ./程序名 & 
//不输出错误信息
nohup ./程序名 >/dev/null 2>&1 &
//如果要关闭程序,可以使用命令”ps” 查看后台程序的pid,然后使用“kill 程序pid”命令,关闭程序比如程序名为test,可以用如下命令查询
ps aux|grep test
//关掉进程
kill 进程编号
//开机启动glang
vi /etc/rc.local
cd gopath
nohup ./main &

1.nohup

用途:不挂断地运行命令。

语法:nohup Command [ Arg … ] [ & ]

  • 无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。
  • 如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。
  • 如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。

退出状态:该命令返回下列出口值:   

  • 126 可以查找但不能调用 Command 参数指定的命令。   
  • 127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。   
  • 否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。

2. &

用途:在后台运行

一般两个一起用

nohup command &

nohup redis-server ./main >/dev/null 2>&1 &

查看运行的后台进程

(1)jobs -l

(2)ps -ef

ps -aux|grep test.js
  • a: 显示所有程序
  • u: 以用户为主的格式来显示
  • x: 显示所有程序,不以终端机来区分

3. windows上

windows 上面用

go build -ldflags "-s -w -H=windowsgui"
  • -s 省略符号表和调试信息
  • -w Omit the DWARF symbol table 省略DWARF符号表
  • -H windowsgui 不打印信息到console (On Windows, -H windowsgui writes a "GUI binary" instead of a "console binary."),就不会有cmd窗口了

curl 命令测试

curl发送参数名字username 和pwd 是页面定义的两个参数名字,form1 是页面定义的表单的名字。

curl  -d "username=test&pwd=123456"  http://serverIP/webAuth/index.htm/form1

以上就是Golang交叉编译之跨平台编译使用详解的详细内容,更多关于Golang 跨平台交叉编译的资料请关注脚本之家其它相关文章!

相关文章

  • Go语言中数据压缩与解压的实现

    Go语言中数据压缩与解压的实现

    本文介绍了Go语言中常见压缩格式的使用方法,compress标准库支持gzip、zlib、flate等格式,主要通过io.Reader和io.Writer接口实现压缩解压功能,下面就来详细的介绍一下,感兴趣的可以了解一下
    2025-10-10
  • 浅谈go中cgo的几种使用方式

    浅谈go中cgo的几种使用方式

    本文主要介绍了浅谈go中cgo的几种使用方式,文中根据实例编码详细介绍的十分详尽,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • GO比较两个对象是否相同实战案例

    GO比较两个对象是否相同实战案例

    我们时常有比较两个值是否相等的需求,下面这篇文章主要给大家介绍了关于GO比较两个对象是否相同的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • go-zero自定义中间件的几种方式

    go-zero自定义中间件的几种方式

    首先 go-zero 已经为我们提供了很多的中间件的实现,但有时难免有需求需要自定义,这里介绍几种自定义的方法,文中通过代码示例讲解的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2024-07-07
  • goFrame的队列gqueue对比channel使用详解

    goFrame的队列gqueue对比channel使用详解

    这篇文章主要为大家介绍了goFrame的gqueue对比channel使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Golang切片Slice功能操作详情

    Golang切片Slice功能操作详情

    这篇文章主要介绍了Golang切片功能操作详情,切片是一个拥有相同类型元素的可变长度的序列。它是基于数组类型做的一层封,切片是一个引用类型,它的内部结构包含地址、长度和容量
    2022-09-09
  • Gin框架自带参数校验的使用详解

    Gin框架自带参数校验的使用详解

    这篇文章主要为大家详细介绍了如何使用Gin框架自带的参数校验,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解下
    2023-09-09
  • golang切片内存应用技巧详解

    golang切片内存应用技巧详解

    这篇文章主要介绍了golang切片内存应用技巧详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • go语言中线程池的实现

    go语言中线程池的实现

    Go语言中并没有直接类似 Java 线程池的内建概念,主要通过goroutine和channel来实现并发处理,本文主要介绍了go语言中线程池的实现,具有一定的参考价值,感兴趣的可以了解一下
    2025-04-04
  • 聊聊Golang的语言结构和变量问题

    聊聊Golang的语言结构和变量问题

    这篇文章主要介绍了Golang的语言结构和变量问题,在golang中定义变量的一般形式是使用 var 关键字,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2021-11-11

最新评论