Golang中国

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
#1 facat • 2014-09-03 20:46

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

snake117
#2 snake117 • 2014-09-03 20:54

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

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

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

所以用不着webkit。

facat
#3 facat • 2014-09-03 23:14

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

snake117
#4 snake117 • 2014-09-04 00:11

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

jimmykuu
#5 jimmykuu • 2014-09-04 00:31

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

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

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

snake117
#6 snake117 • 2014-09-04 00:37

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

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

jimmykuu
#7 jimmykuu • 2014-09-04 00:43

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

jimmykuu
#8 jimmykuu • 2014-09-04 00:46
snake117
#9 snake117 • 2014-09-04 00:57

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

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

kzzhr
#10 kzzhr • 2014-09-04 02:32

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

bianweiall
#11 bianweiall • 2014-09-04 16:10

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

snake117
#12 snake117 • 2014-09-04 16:28

@kzzhr 不用重复造轮子。

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

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

captain
#13 captain • 2014-09-04 21:45

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

snake117
#14 snake117 • 2014-09-04 21:46

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

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

defia
#15 defia • 2014-09-04 23:48

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

kulle
#16 kulle • 2015-03-11 16:07

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

heimeil
#17 heimeil • 2015-03-11 17:25

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

hanser2015
#18 hanser2015 • 2015-03-11 17:51

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

gs272
#19 gs272 • 2015-03-11 21:39
bigbear
#20 bigbear • 2015-03-11 22:11

不明觉厉

需要 登录 后方可回复, 如果你还没有账号你可以 注册 一个帐号。