最近在mac上用go写一个文件传输项目时,期待自动打开一个浏览器页面然后进行操作。然而直接使用go build生成可执行文件并执行后,在打开浏览器页面的同时,也会打开一个终端窗口(打印日志等信息),在浏览器关闭(主进程终止)的情况下终端还是开着,每次都需要手动关闭终端,很影响体验。
经查询,可以通过以下命令隐藏cmd窗口
go build -ldflags="-s -w -H windowsgui"
代码作用是:
可以减小可执行文件大小并隐藏窗口。
此外,如果想更加清楚的看到编译过程可加-x 参数,如bulid -x …
但此方法只适用于windows系统,在macOS上编译会提示
adddynlib: unsupported binary format
无法达到预期结果
在windows下,控制台和窗口是分离的,它们有两个不同的入口(main 和 WinMain),但在macOS上,这两者都是相同的可执行文件。
上述终端窗口的出现是因为直接启动二进制文件而不是将其作为应用程序包打开,因此,考虑在编译时将其构建为应用程序包再打开。
比如我的app名字是zTrans,则命令如下
mkdir -p zTrans.app/Contents/MacOS
go build -o zTrans.app/Contents/MacOS/zTrans
执行完毕后使用Finder打开,可以看到目录下的zTrans.app,点击启动不会出现终端窗口,完美解决!