用 Go 开发桌面应用程序(GUI)的几种方法对比
我想构建一个本地 Go 桌面应用程序,有几种方法可以做到:
-
Electron[1]:将 Node.js[2] 和 Chromium[3] 浏览器绑定在一起,以创建一个打包的本地 Web 应用程序。可与 Go 框架(例如 go-app[4] 或 go-astilectron[5])一起使用。
-
Lorca[6]:使用本地安装的 Chrome 浏览器,通过 dev-tools communication protocol[7] 实现。
-
Webview[8]:使用 webview[9] 创建一个本地窗口,并使用 CGo 绑定在其中渲染应用程序。
Lorca
Go 中一个简单的 Lorca[11] 应用:

因为复杂性被隐藏了,所以看起来非常简单!上面的代码打开一个 Chome 窗口,通过 websocket 连接到其 dev-tools[12] 端点,发送要加载的 HTML,并提供 Go 和 JS 之间的通信:
更酷的是,您可以在 Chrome 中调用 JS 函数并在 Go 中获取输出:
使用这个库是如此容易,如此直观,如此实用,以至于我刚使用它时感到困惑。我以为一定有陷阱,不会这么简单。但是没有,它就是这么简单。
另外一个好处是您可以使用 Chrome 开发工具来帮助调试任何问题或调整布局。另外,鉴于我自 2014 年以来[13]一直在写 Promise,我喜欢使用 JS Promise 在 Go 和 JS 之间实现异步调用。
Lorca 的最大缺点是,由于它使用 Chrome,因此某些应用程序详细信息(如系统菜单,图标,标题)无法自定义。然后,需要在应用程序优化和简单应用程序之间进行权衡。根据您构建内容的不同,有好有弊,例如,如果您正在构建内部工具,那会很好,但是对于企业应用程序,这可能看起来并不好。
Webview
Webview[14] 是一个库,可帮助直接在本地组件之上构建 Web 应用程序。执行此操作的代码如下:
这与 Lorca 非常相似,我认为 Lorca 也是基于 Webview 的。尽管与 Lorca 相似,但输出还是有些不同:
从上图可以看到 Webview 应用程序窗口没有阴影,没有边框,并且在屏幕的左下角进行了初始化。可以通过将Window返回一个 unsafe.Pointer到 OS 依赖的窗口对象的方法(在 macOS 中是 NSWindow)进行定制。这是开始难的地方。
要使用该 Window 对象,我们必须将 Go 的绑定写入本地组件。举例来说,如果我们希望我们的窗口居中启动,我们会调用 NSWindow 的 Center 方法。因此,我们需要在三个文件中写绑定(改编自 gogoa[15]):
ns_window.go
ns_window.h
ns_window.m
然后在main()函数中,我们可以将窗口居中:
与 Lorca 不同,Webview 可以针对我们的应用程序进行完全自定义。问题在于它需要一些工作。
Webview 的一些其他部分使得用它变得有些困难:
- 如果使用 Bazel 和 gazelle,则webview生成的Build.bazel文件不正确,clinkopts = ["-framework WebKit"] 必须对其进行修补。
- 调用 w.Init 仅在w.Navigate被调用时有效,但随后w.Eval调用将停止工作。
- 要设置标题,您可以如上所述编写绑定,或者您必须使用Dispatch方法w.Dispatch(func() { w.SetTitle("Title") })。
我不确定有多少是Webview,有多少是 NSWindow。我需要进行更多的调查和学习,才能更清楚地说明这些发生的原因。
Electron
我之前的文章[16]是关于构建一个简单的 Electron 应用程序的,该应用程序如下所示:
Electron 用于许多大型产品,例如 VSCode。这可能是因为将所有内容捆绑到一个应用程序中使可移植性变得更加简单,并且可以广泛地定制应用程序。将应用程序与浏览器和 Node.js 捆绑在一起的不利之处在于,它导致程序 非常庞大。
让 Go 与 Electron 一起工作也有些困难。但有一些框架可以简化[17]此过程,例如 go-astilectron[18],不过这些框架很复杂,并且大多数功能不完整。另一种方法可能是使用我之前写过的[19] Go 编译为 WASM ,但这也不是简单的解决方案。
Electron 的优势在于它是便携式的,可定制的,并且经过了应用程序分发的严格测试。只是和 Go 结合有点复杂。
三者比较
我认为要进行的主要比较是可定制性与简单性。到目前为止,Lorca 是最简单的,其可定制性非常有限,Webview 可以完全自定义,但有些困难,而 Electron 则可以完全自定义,但很难与 Go 一起使用。
同样,框架之间的捆绑包大小也有很大差异。Lorca 的二进制文件大小为 8.7 MB,Webview 的大小为 3.7Mb,Electron 的大小为 157Mb。
调试工具也有所不同:Lorca 和 Electron 使用 Chrome 开发工具,而 Webview 使用 Safari 开发工具。
结论
Lorca 和 Webview 都可以与 Go 一起很好地使用,最终二进制较小,并且具有类似的 API。主要区别在于基础渲染器(本机)和调试工具。
我认为 Electron 与 Go 一起使用可能太复杂了,但没有太多困难。
一个潜在的工作流程是在开发和 Webview 分发期间使用 Lorca。Lorca 提供了用于调试和开发的熟悉工具,其中 Webview 提供了可分发的可定制性。Lorca 也是很好的备份,可以交叉编译到 Webview 不支持的其他操作系统。
wails[20]
gotk[21]
原文链接:https://maori.geek.nz/golang-desktop-app-webview-vs-lorca-vs-electron-a5e6b2869391
译者:polaris
参考资料
[1]
Electron:
[2]
Node.js:
[3]
Chromium:
[4]
go-app:
[5]
go-astilectron:
[6]
Lorca:
[7]
dev-tools communication protocol:
[8]
Webview:
[9]
webview:
[10]
构建一个简单的 electron 应用程序的文章:
[11]
Lorca:
[12]
dev-tools:
[13]
自 2014 年以来:
[14]
Webview:
[15]
gogoa:
[16]
之前的文章:
[17]
简化:
[18]
go-astilectron:
[19]
之前写过的:
[20]
wails:
[21]
gotk:
哪款桌面更适合你?GO桌面、WP8桌面横评
从第一部安卓手机诞生开始,人们对手机的桌面美化就一直没有停下来。很多厂商在手机出厂的时候也预装了自己的桌面,但很多用户对这些桌面依然不满意。
一、软件界面对比
1、GO桌面界面比较华丽,采用传统的抽屉式的设计,主界面默认五个屏幕,主屏幕是默认的图标和天气时钟,点击抽屉按钮和屏幕的Home键可以轻松切换程序列表和主屏幕。
需要注意的是,主屏左边一个“免费电话”和“日历”的功能,在点击之后手机开始会自动下载软件,根本停不下来,好奇心重的用户千万不要去点击。
2、WP8桌面界面非常简洁,左边为主屏幕,右边则是程序列表。主屏幕的应用主要以磁贴的方式展现,默认有电话、短信、浏览器、相机等磁贴,你可以根据自己的需求将应用添加到桌面主屏。
长按桌面磁贴,可以进入磁贴的编辑模式,你还可以根据自己的喜欢编辑磁贴的大小、颜色和图片背景,可玩性很强,对喜欢追求独一无二的朋友来说是一个非常好的选择。
除了可以添加应用到桌面外,WP8桌面还支持自定义磁贴功能,你可以自主选择图片,颜色和功能进行DIY,制作出你的专属磁贴。另外WP8桌面还支持添加系统小部件到桌面,丰富你的手机桌面。
二、功能设置对比
通常在手机桌面安装后,只是默认的几个程序图标,所以桌面的设置功能的便利性自然也成为了考核桌面实用性的重要指标。
在GO桌面诸多的设置功能中,最好用的是GO桌面的编辑功能,点击编辑功能后,会弹出来小部件、GO功能、应用和壁纸的功能,方便用户进行功能设置。
总的来说,GO桌面无论是桌面还是桌面设置的功能都很多,但缺点是设计的不够简洁,用户在找到这些功能的时候不那么容易,也很难记住进入这些功能的步骤。
2、与GO桌面不同的是,WP8走的是简约路线,桌面风格独特,设置起来也很简单。除了可以通过按下菜单键进入菜单,WP8桌面还支持屏幕手势操作,在主屏幕往右滑和程序列表往左滑,就能呼出菜单栏。
在WP8桌面诸多的功能中,最值得一提的就是它的主题功能,为了满足用户更换主题的需求,WP8桌面已经上架了数十万个免费主题,无需付费就能下载。之所以有这么多主题,是因为WP8桌面支持上传主题的功能,目前已有超过100万用户上传了自己DIY的主题。
三、内存占用对比
对于手机桌面来说,除功能实用外,还需看资源占用情况。下面我们一起来看看GO桌面和WP8桌面在启动后的资源占用情况。
从内存占用来看,WP8桌面的内存占用仅为10MB,这可能得益于它小巧的体积和高效率的代码。相比之下,GO桌面的内存占用很大,可能是因为它功能太复杂和界面太过于花哨的原因。
今天给大家推荐的两款手机桌面,都是目前最主流的桌面美化软件。总的来说,GO桌面功能复杂,但占用的内存也很大,低配置的手机可能吃不消。而WP8桌面拥有独特的风格,对于喜欢DIY的朋友来说是一个非常好的选择。总之,这两款手机桌面各有特色,大家可以根据自己的喜好来进行挑选使用。
======关于ROM基地======
ROM基地创办于2011年11月,是由刷机大师团队精心打造的ROM门户网站。
咨询/求助:请加刷机大师微信公众账号“shuajidashi“。
标题:go桌面下载【go桌面最新版本下载】
链接:https://yyuanw.com/news/xydt/35709.html
版权:文章转载自网络,如有侵权,请联系删除!
用户评论
终于找到go桌面最新的版本了!
有18位网友表示赞同!
一直在找这个软件的最新版,这下可以放心使用了。
有18位网友表示赞同!
Go桌面好用,简洁美观!
有7位网友表示赞同!
下载链接在哪儿啊?急需更新我的版本!
有20位网友表示赞同!
不知道这个最新的版本还有什么改进呢?能分享一下吗?
有18位网友表示赞同!
之前用着老版本的,体验不太好,期待新版本能提升了!
有16位网友表示赞同!
想尝试一下Go桌面,看看它的效果怎么样?
有18位网友表示赞同!
最近发现好多朋友都在用Go桌面,我也想去体验一下。
有16位网友表示赞同!
这个软件真的不错,操作简单易上手,好评!
有7位网友表示赞同!
强烈推荐Go桌面,尤其喜欢它的简约风格!
有8位网友表示赞同!
希望这次更新能让程序运行更流畅!
有9位网友表示赞同!
下载的时候要注意安全,不要遇到恶意链接啊!
有13位网友表示赞同!
有没有教程可以介绍一下这个软件的使用方法?
有12位网友表示赞同!
想了解一下Go桌面的收费情况,是免费的吗?
有19位网友表示赞同!
这个软件和别的桌面环境有什么区别呢?
有19位网友表示赞同!
看到标题我就知道要去下载新版本啦!
有10位网友表示赞同!
一直在等新版本的更新,终于来了!
有5位网友表示赞同!
Go桌面是不是支持多语言啊?
有13位网友表示赞同!
期待这个新版本能带来更多新功能!
有11位网友表示赞同!
希望下次更新能够解决一些小问题!
有13位网友表示赞同!
终于可以告别老版本了!
有17位网友表示赞同!