只接受发布货源信息,不可发布违法信息,一旦发现永久封号,欢迎向我们举报!
1064879863
16货源网 > 餐饮行业新闻资讯 > 软件开发 >  golang为什么没有官方的gui包?


golang为什么没有官方的gui包?

发布时间:2019-09-02 15:21:03  来源:网友自行发布(如侵权请联系本站立刻删除)  浏览:   【】【】【
因为google给go的定位是做分布式系统
golang为什么没有官方的gui包?因为google给go的定位是做分布式系统想开发的话可以看看 QT 绑定: niemeyer/qml 路 GitHubGo 设计的初衷并不致力于一个新的UI 编程语言,所以这件事情的优先级在核心开发组中肯定很低,找找第三方的库吧和定位有关,go的目标是服务端。而且google一切都是web,对google来说标准ui语言是html css。更新:我从2014年底开始使用 andlabs/ui · GitHub 开发GUI 程序。这个库支持多个操作系统,包括 Linux 和 MacOSX。而且 API 和程序结构充分使用了 Go 的特色语法:lambda、goroutine 和channels。看看这个库的代码,能充分意识到 Go 其实比 Objective-C、Java、C++、Python、Tcl/Tk、MATLAB 都更适合用来开发 GUI 程序——程序简练,功能丰富,执行高效。唯一的遗憾是,它只支持桌面操作系统。我问了一下作者可否支持 mobile 开发(support iOS? · Issue #64 · andlabs/ui · GitHub),作者觉得 mobile GUI 程序写法和桌面GUI 程序差异太大,应该用另一个库来支持 mobile GUI 的开发。

以下回答来自我的博客:GUI Programming Using Go;希望起到收集汇总一些信息的作用。

Go语言里有个有意思的话题,是如何用Go语言写GUI程序。因为Go的标准packages没有用来写GUI程序的,所以很多人在问,能否有一个标准GUI package?

2013年6月,有一个Go Authors的访谈。其中也有人问到上述问题。Rob Pike直接提到他年轻的时候设计的Newsqueak语言,一个专门用来写GUI程序的语言。Andrew Gerrand赶紧把话题拉回来,介绍了几个他看到的比较好的第三方GUI packages。这段访谈的缩减版可以在Go的主页里找到:http://blog.golang.org/a-conversation-with-the-go-team

我用过几个比较方便的GUI toolkit,包括GTK和Qt。根据这么点儿经验,我赞同Rob Pike对Go语言在GUI编程中的前景:

  1. Go支持memory garbage collection。这样可以方便的管理widgets的memory消耗。用过GTK的人应该都被迫理解基于C设计的floating reference机制吧?这篇gotk3的作者写的博客,专门介绍了如何基于Go语言重新设计GUI widgets的内存管理机制。值得一读,很有启发!

  2. Go的concurrency应该能方便的让GUI不被后台处理拖累,保持界面反应的流畅。大家还记得当年BeOS(要不是Jobs介入,Apple本来要收购的;最后收购了NeXT)吗?它的一个重要特点就是使用multithreading技术保证GUI总是有反应。

虽然Andrew Gerrand当时举得例子go.uik的作者已经把项目关掉了,并且号称“如果再打开,一定要重写”:

This project is closed. If I begin again, it will be from scratch and using lessons learned while writing go.uik. Of course, if I begin again it will still be called go.uik.

但是其他项目层出不穷。我上周在我的iMac(Mavericks)上尝试了go-qt5,这是一个Qt 5的Go语言binding。今天刚刚尝试了gotk3,一个完全用Go的内存管理方式(idiomatic)写的GTK的binding。感觉都很不错。因为这两个项目都在快速演进中,它们主页上介绍的用法和实际操作略有不同。这里列一下我的操作。

go-qt5

主页上的tutorial在我的环境下不完全好使,我的总结在这里。或者简单记录操作流程如下:

  1. 用Homebrew安装5.2:

     brew update && brew doctor && brew install qt5

    这会提醒你说“目前世界上大部分人都在用Qt4,要不不要这么激进用Qt5啊?”(Homebrew真的很人性化。)但是很不好意思的,Qt4不支持最新版本的OS X Mavericks。

  2. 检出go-qt5代码:

     mkdir -p /home/you/go-qt5
     export GOPATH=/home/you/go-qt5
     go get github.com/salviati/go-qt5
  3. Build go-qt5

基本上可以按照go-qt5的README来操作。有几点要注意:因为Homebrew不会在/usr/local/bin下面创建指向Qt 5的symbolic links,所以你调用qmake的时候可能需要用全路径名:/usr/local/Cellar/qt5/5.2.0/bin/qmake。另外,运行自己写的Qt程序的时候,要记得把链接库$GOPATH/src/github.com/salviati/go-qt5/lib/libgoqt5drv.1.0.0.dylib和你的程序放在同一个目录下。

gotk3

在Mac OS X上得安装和使用基本上就根据这篇文章来,但是有两点需要注意:

如果build GTK3的时候,报错找不到-lpython2.7,可以通过LDFLAGS环境变量告诉jhbuild Python的库在哪里。比如:

LDFLAGS=-L/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/usr/lib/ jhbuild build meta-gtk-osx-gtk3

另外,编译gotk3的时候,不需要用jhbuild shell启动一个新的shell,只需要设置一下环境变量:

export PKG_CONFIG_PATH=/Users/wangyi/gtk/inst/lib/pkgconfig:/Users/wangyi/gtk/inst/share/pkgconfig:/usr/lib/pkgconfig    

然后就可以通过go get下载和编译gotk3了。

go get github.com/conformal/gotk3/gtk
GUI 设计是个难题。golang目前应该还不会把精力方到GUI上,不过一切皆有可能吧。
目前我是采用web作为界面,可以用qt或者其他的GUI嵌入一个webkit之类的view。
golang本身不需要任何容器就能在客户机实现一个web server,那么用一个嵌入webkit的桌面应用访问客户机上的web server会很方便。并且也不需要学习额外的GUI的知识,跟做web一样。确实是没有真的 Native GUI 库。Qt 仍然不是真的"Native"。但是这确实很困难。UI和语言本来就是两码事。
你也可以说C/C++/NodeJs...怎么没有官方的UI包。

可能你说的UI包指的是语言标准库中包含的包,想做到跨平台,而且无其他依赖,这本身就很难,而且还要你看的过去,这就几乎不太可能了。最后Golang设计目标是分布式服务器端应用程序,这对GUI不是很敏感。很多gui项目都停掉了,发展不下去。毕竟重复发明轮子的事情不那么好做。还是应该借助现有的gui平台做对接。不过即便如此,前面回复中列举的很多gtk/qt项目也都没什么活力了。目前来看最有潜力的应该是oskca/sciter · GitHubWalk 不错,不过只能用在 windows.沒人感覺這個問題本身就有點奇妙麼?……

說起來常見語言中爲什麼只有Java和.Net系列有官方GUI包?

原因不過是:其有“操作系統”在後面。
JVM算是某種意義上的操作系統,而且是“統一”的,所以java有GUI庫(而且還經歷了那麼久的演變,最後還是很醜)。
而.net和windows都是微軟的,而且windows(PC)佔有量是微軟操作系統中最大的,所以.net有windows的GUI庫也是理所當然的。

所以說某語言幹嘛一定要有官方GUI庫呢?C、C++都沒有“官方GUI庫”,大家還不都是(按需求/喜好)選擇多種多樣的第三方庫,進行GUI編程?说实在的,我一直把语言当作工具看待,不要成为一种工具的奴隶,是一个好的使用者的节操。
那么,就很显然会有一个结论,任何工具,其实都是为了某种目的服务的。

杀鸡用牛刀,不光是大材小用的问题,你还不一定能杀得好。
那晾衣杆当双截棍用,这不能说明你使用晾衣杆的水平出神入化,只能说是太蠢了学不会双截棍。

所以,golang这种工具,就应该用来做它被设计去做的那些事情。
譬如,服务端,高并发。
而不是,客户端,gui。

google的人从他们的c代码规范上就能看出来,是一坨:
“简单统一就是美”
的强迫症患者。
因此,他们也是秉承着golang的目的,简单统一的精神在做官方库的维护更新,
他们压根就没想过拿golang去做客户端和gui吧,
所以要他们去再做一个gui库,应该和杀了他们没两样吧。

以上是我猜的,然后,实际上
gui和语言是两码事。除了苹果自成一体,就没见过哪个语言有“官方ui库”的。现在有很多go GUI但是有那个觉得就是自己想要的GUI呢?开发一个GUI简单,想出一个感觉符合这个时代的就难了

Go这块服务程序主要还是跑在Linux上,

以往的开发习惯在Linux开发的工具基本都以命令行工具为主。



最近组里同志需要开发个服务支持的小工具,也在纠结这个问题,后来选择了QT。

如果涉及稍大的需要,大多数情况都会选择B/S来做。

我只发一张图,像素渣,其他随便看

嗯,sciter+golang写的.

-------

--------------------2018-06-05更新

最近发现了一个挺不错的blink精简版 miniblink

很幸运找到了相关的golang绑定 fy0/miniblink-go-example

--------------------原答案

如果只是公司内部使用或者自己的话可以考虑使用chrome的命令生成界面或者使用chrome app模式,使用websocket 进行js和golang通讯,效果也挺不错的,我使用的是 mgutz/chromeapp 这个包,除了开始运行的时候渲染速度慢,其他我觉得已经很ok了。

如果需要在广大小白用户电脑安装的话,我不清楚了,有人说用sciter,我也尝试过,体验过程很酸爽,尤其是不能用js,我觉得很压抑,还有一个库是基于webview zserge/webview 体验也不错吗,但是不能自定义窗口启动的位置,而且只能做单页面的应用,如果是多页面跳转我就不知道怎么做,如果你们知道麻烦你们告诉我一下,谢谢

UI这种需要快速迭代和bug fix的东西,不是很适合作为语言标准库的一部分,因为会被release的频率限制。不仅 golang,对其它语言也是一样。

golang目前还没有官方的gui包,官方本来就没有心发展go的gui这块。

Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。

go的三个高富帅特性:运行快、开发快和部署快。。

GO没有原生的界面库,所以不能直接用来写GUI界面。但最近互联网上已经涌现出不少成熟、好用的第三方界面库。使用它们,就同样可以写出同C#、C++的界面。而且效率还更胜一筹。

我也来凑个数,go walk写的 ,目前来看,基本够用。界面有些丑,凑活看吧!还有其他的gui库嘛!求推荐!

至于为什么要写桌面应用,因为桌面应用相对web开发要复杂很多,可以快速的学到很多东西!下一步,想用gin做web开发了。

责任编辑:
热门阅读排行
© 16货源网 1064879863