许多开发者发现,打造本地的Go桌面应用既吸引人又具挑战性。他们面临选择,要么采用Lorca这类简单但定制性不足的方法,要么尝试其他虽能全面定制却操作复杂的方式。这些问题都值得深入讨论。
方法一Lorca
Lorca运用的是本地浏览器,借助开发工具来完成应用构建。这种做法比较简单易行。比如,在处理一些简单的开发工作或迅速检验某些想法时,Lorca能迅速上手。但这种方法也有其不足之处,因为它依赖于某些特定元素,导致应用中的某些关键部分,如系统菜单、图标、标题等,无法进行个性化定制。这限制了它在那些对外观和功能完整性要求较高的项目中的应用,比如企业级应用,它们需要更加精细的外观和功能定制。
func main() {
// Create UI with data URI
ui, _ := lorca.New("data:text/html,"+url.PathEscape(`
Hello
Hello, world!
`), "", 600, 200)
defer ui.Close()
// Create a GoLang function callable from JS
ui.Bind("hello", func() string { return "World!" })
// Call above `hello` function then log to the JS console
ui.Eval("hello().then( (x) => { console.log(x) })")
// Wait until UI window is closed
<-ui.Done()
}
Lorca虽然相对容易上手,但这种易用性是有条件的。在遇到较为复杂的应用场合时,它的不足之处可能会变得明显。此外,这种方法在应用程序个性化定制方面存在不足,使得开发者难以随心所欲地构建他们心中的理想桌面应用。
n := ui.Eval(`Math.random()`).Float()
fmt.Println(n)
方法二特定库
该库适用于在本地组件基础上搭建Web应用。其特色在于高度可定制。与Lorca不同,它能实现应用的全定制化,例如调整标题等,只需编写相应的绑定或特定方法即可。然而,它并非没有缺陷。开发者需将Go语言的绑定代码嵌入本地组件,这要求一定的编程知识和操作技巧。根据实践经验,在构建过程中,开发者可能会遭遇多种技术挑战,解决绑定时的兼容性和功能问题往往需要投入大量时间。
这种库特别适合那些对软件有高度定制化要求的场合。比如,当你需要开发一款完全根据客户特定需求定制的软件,从界面设计到功能实现都能做到全面定制。然而,对于那些只想简单搭建应用、缺乏相关经验或技术能力不足以应对复杂绑定操作的开发者而言,这种方法就显得相当有挑战性。
func main() {
w := webview.New(true)
defer w.Destroy()
w.SetSize(600, 200, webview.HintNone)
// Create a GoLang function callable from JS
w.Bind("hello", func() string { return "World!" })
// Create UI with data URI
w.Navigate(`data:text/html,
<!doctype html>
<html>
<head><title>Hello</title></head>
<body><h1>Hello, world!</h1></body>
<script> hello().then((x) => { console.log(x) }) </script>
</html>`)
w.Run()
}
其他相关框架
构建Go桌面应用时,存在一种方法,即把应用与浏览器及Node.js结合。这看似提高了可移动性,实则导致程序体量巨大。尽管有些框架试图简化这一过程,比如与Go相关的框架,但它们也存在问题。这些框架通常功能不全且结构复杂,使得开发者使用时并不轻松。
此外,将Go语言编译成WASM的过程并非轻松之举。此类做法显现出,在开发Go桌面应用时,似乎缺乏一种既简便又能满足个性化需求、同时又能控制程序大小的理想途径。
重点比较
package main
// #cgo CFLAGS: -x objective-c
// #cgo LDFLAGS: -framework Cocoa
//#include "ns_window.h"
import "C"
import "unsafe"
type NSWindow struct {
ptr unsafe.Pointer
}
func (self *NSWindow) Center() {
C.Center(self.ptr)
}
比较可定制性和简便性是关键。Lorca在这三者中最为简便,但定制性不足,让人感到烦恼;而特定库则可以实现全面定制,但操作起来却颇为复杂;另外,如将Go编译成WASM这类方法,也难以轻松实现构建。从最终生成的二进制文件大小来看,Lorca和特定库的文件相对较小,且它们的API也颇为相似。
这种比较的目的在于帮助开发者根据项目的具体需求挑选恰当的构建方式。若是进行内部工具的快速开发,对外观等定制性需求不高,Lorca可能是个不错的选择。而若是要开发一个要求高、功能丰富、可定制的企业级应用,那么就需要考虑那些具有强大定制能力的特定库方案。
#include
void Center(void *);
实际应用场景中的选择
#include "ns_window.h"
void Center(void *self) {
NSWindow *window = self;
[window center];
}
Lorca是个不错的备份选择。尤其是在得对不支持特定库的其他操作系统进行交叉编译时,Lorca的优势尤为明显。开发过程中,不同项目有不同的需求。比如,若在开发一款供企业内部员工使用的简易工具,主要需求是快速查询数据,对界面美观和定制性要求不高,Lorca便能迅速满足这些需求。而若要开发一款面向市场的软件产品,就得更多地考虑那些能提供全面定制功能的特定库。
window := NSWindow {w.Window()}
window.Center()
在选择不同应用场景时,需全面考量多个要素。这些要素涵盖开发所需的时间、人力资源的投入成本,以及项目的具体特性。
更多选择
除了前面提到的,还有wails或gotk等选择,这些提供了构建和发布应用的额外途径。这些方法值得开发者们关注,可能在特定情况下成为最优选项。比如,在特定操作系统下或满足特定功能需求的开发中。这也提醒开发者,在打造本地Go桌面应用时,不应只限于几种熟悉的方法,而应持续探索新的可能性。
各位开发者,在你们开发Go语言桌面应用时,更看重的是应用的简洁性还是个性化定制?欢迎在评论区留言交流。觉得这篇文章对您有帮助,不妨点赞并分享给更多人。