我们为什么不能用网页和websocket模拟出一个golang的GUI出来?

go是服务端、系统级的语言。go没有gui,现有的两个第三方库"github.com/andlabs/ui"和"github.com/lxn/walk"都在向着高大上的方向发展。

我觉得这很没有必要。go的专业不在这个方面,也没有必要去重复造轮子。但是go也确实需要一个比命令行更友好的交互界面。

比如当我们需要通过图像来了解一些数据时,命令行是办不到的。

我认为一个网页版的GUI就可以解决这个问题,关于网页的实时更新,也可以通过ajax或者websocket实现。

而且网页是跨平台的,网页GUI也不是没有,大多数路由器的管理还不是通过网页GUI做的。

现在的情况是,网页版的GUI必须要go编写者去额外写网页,还有伺服的javascript代码,这样肯定很麻烦。

那么我们能不能实现一个库呢?一个网页GUI的库。

这个库使用websocket/ajax来实现事件循环,用http来与程序进行信息交换,用网页控件模拟窗口控件。库本身会把javascript代码和数据交互封装起来(因此go编写者不需在意它们),而且会根据go程序里定义的控件对象来自行生成HTML代码。

这个库可以在默认端口监视,也可以将事件处理封装为一个http.Handler因此可以挂载到已有服务端上。

于是我们得到一个简单而实用的GUI库。

我能力有限,力有不逮。希望有人能接手,也让俺参与进去。

@Unknown @jimmykuu @ajaxj 大神指点啊

共 20 个回复


facat

为了解析javascript还得带一个webkit?太大了吧。

# 0

snake117

@facat 不是的,javacript只是用来实现ajax或者websocket,也就是让网页和程序保持实时的数据交互。

这个任务非常的固定,基本上是位于GUI底层,和上层的关系很小,因此完全可以抽象为一个可以复用的函数。这个函数只要挂载进html页面里就够了。

这个函数不是给程序用到的,是给浏览器用的。

所以用不着webkit。

# 1

facat

@snake117渲染网页怎么解决?关键是这个地方。估计还是挺麻烦的。

# 2

snake117

@facat 是挺麻烦的。目前想到的有三个方案,表格、div和javascript限定。都很麻烦,关键是html会自动调整布局,我实在是不太懂。

# 3

jimmykuu

用网页做GUI是有的,包括这个项目,用的就是嵌入的Chrome,https://github.com/CzarekTomczak/cef2go

我一直对用网页做GUI应用感觉很吃力的是,你无法做到和本地应用完全一样,当然可以通过样式看起来差不多,不过样式调起来是听吃力的。

还有一个就是用传统的GUI框架做应用,比如Qt,我要放一个按钮,用一个标准的QPushButton就行了。而HTML就不同了,你可以用button,可以用a,可以用各种框架,可以用自定义标签,样式不同,界面也五花八门。万一你花了大力气弄出来一个界面,用户说不喜欢,你用jQuery UI风格的,那么完蛋了,要么你水平超高,硬是用css调出一个jQuery UI风格的界面来,要么换用jQuery UI框架重做一把,HTML几乎要重写。

# 4

snake117

@jimmkyuu 我的目标不是提供给用户,而是提供给程序员自身,因此对界面的漂亮没有要求,而要求实用、标准化。

另一个就是,我打算实现一个从go版本控件对象的定义到自动生成网页的工具。这个工具生成的网页不需要多漂亮,但应该是符合个go对象的定义的。

# 5

jimmykuu

这种框架在code.google.com上有一个的,具体哪个忘了,回头找找。就是界面代码是用go写的,程序运行起来生成的是web页面。

# 6

snake117

@jimmykuu 不行啊,这个只是封装了页面而已。

我希望得到的不依赖javascript的绝对布局控件的方法没有啊。

# 8

kzzhr

你是否觉得C语言也需要一套GUI库

# 9

bianweiall

现在https://github.com/go-qml/qml挺不错的,现在是v1版了,Linux和Windows下都好用,还可以嵌个webview,不过就是新版本qt 的webview还不完善,还不可以和js交互,等qt5.4吧。

# 10

snake117

@kzzhr 不用重复造轮子。

其实我本人很相中tck的tk,希望有个简单、实用的GUI库。

注意,是简单、实用;不求高大上,不求花里胡哨。

# 11

captain

楼主说的其实不是go的GUI库吧,你要的只是一套可以做到实时更新的前端框架,无关后端语言

# 12

snake117

@captain 这和gui有啥本质区别么?

都是交互界面,也只是交互界面,仅此而已。

# 13

defia

楼主想法不错的..支持你搞一个

# 14

kulle

这是很不错的想法, go缺gui, 有时候想设置一下软件, 或者监视一下软件的状态, 用命令行真不方便. 既然go能用html来操作后台, 那么go+html 可不可以一定程度代替gui. 不求什么漂亮的界面, 就是方便程序员用的. 我也想做一个出来, 无奈水平太差不只如何下手.

# 15

heimeil

我也是有这个想法,弄个类似node-webkit的go-webkit,也有人实现了,可是看着一堆依赖,就想重新弄一个,但研究一下还是发现和16楼一样,水平太差无从下手,涉及的东西太多了。

# 16

hanser2015

用其他web的  我还是喜欢Flash 和Golang 的结合,如果能成功的话,真是大喜

# 17

bigbear

不明觉厉

# 19