go build在mac系统下生成可执行文件时隐藏终端

背景:

最近在mac上用go写一个文件传输项目时,期待自动打开一个浏览器页面然后进行操作。然而直接使用go build生成可执行文件并执行后,在打开浏览器页面的同时,也会打开一个终端窗口(打印日志等信息),在浏览器关闭(主进程终止)的情况下终端还是开着,每次都需要手动关闭终端,很影响体验。

解决方法:

windows下

经查询,可以通过以下命令隐藏cmd窗口

go build -ldflags="-s -w -H windowsgui"

代码作用是:

  1. -s strip 去掉无用的符号
  2. -w DWARF 去掉DWARF调试信息,得到的可执行程序不可用调试器调试
  3. -H windowsgui 生成带GUI界面的程序时,可去掉dos黑框

可以减小可执行文件大小并隐藏窗口。

此外,如果想更加清楚的看到编译过程可加-x 参数,如bulid -x …

但此方法只适用于windows系统,在macOS上编译会提示

adddynlib: unsupported binary format

无法达到预期结果

macOS下

在windows下,控制台和窗口是分离的,它们有两个不同的入口(main 和 WinMain),但在macOS上,这两者都是相同的可执行文件。

上述终端窗口的出现是因为直接启动二进制文件而不是将其作为应用程序包打开,因此,考虑在编译时将其构建为应用程序包再打开。

比如我的app名字是zTrans,则命令如下

mkdir -p zTrans.app/Contents/MacOS
go build -o zTrans.app/Contents/MacOS/zTrans

执行完毕后使用Finder打开,可以看到目录下的zTrans.app,点击启动不会出现终端窗口,完美解决!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你在本地 Windows 或 Mac 系统下使用 `go build` 命令构建了一个 Go 二进制文件,并想要在 CentOS 系统上编译它,你需要考虑以下两个因素: 1. 确保你的本地系统和 CentOS 系统的架构相同。你可以在本地系统上运行 `go env` 命令,查看 `GOARCH` 的值,然后在 CentOS 系统上运行相同的命令,确保两个值相同。 2. 确保你的本地系统和 CentOS 系统上的 Go 版本相同。你可以在本地系统上运行 `go version` 命令,查看 Go 版本,然后在 CentOS 系统上运行相同的命令,确保两个版本相同。 如果以上两个条件都满足,你可以将生成的二进制文件从本地系统复制到 CentOS 系统。你可以使用 `scp` 命令将文件从本地系统复制到 CentOS 系统,例如: ``` scp /path/to/your_binary_file user@centos:/path/to/destination ``` 其中,`/path/to/your_binary_file` 是你本地系统生成的二进制文件路径,`user` 是你在 CentOS 系统上的用户名,`centos` 是 CentOS 系统的 IP 地址或主机名,`/path/to/destination` 是你希望将文件复制到 CentOS 系统上的目标路径。 然后,在 CentOS 系统上,你可以运行 `./your_binary_file` 命令来运行二进制文件。如果你需要在 CentOS 系统上重新构建二进制文件,你可以使用 `go build` 命令,例如: ``` go build /path/to/your_source_code ``` 其中,`/path/to/your_source_code` 是你在 CentOS 系统上的源代码路径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值