go与qt的新酒老瓶

前言

只所以说是新酒老瓶而不是新瓶老酒是有用意的。

因为QT是器,老瓶,出来时配合着C++的。而如今go来势凶凶,自然英雄所见略同。

两大开源神器,跨平台开发,终将双剑合璧了,让你如虎添翼。

过程记录如下

安装QT

→参考指导:

https://www.cnblogs.com/haijian/p/12417129.html

本人使用/usr/local/qt为QTDIR。5.12.10

安装go

→参考指导:

https://blog.csdn.net/icanx/article/details/91438450

→配置go env国内源

liteide源码编译安装

→参考指导:

https://www.cnblogs.com/7explore-share/p/5838281.html?utm_source=debugrun&utm_medium=referral

出现了模板路径报错,于是使用tarena环境,但是root账户,先安装两个包,再改脚本后,编译方成功。

https://www.cnblogs.com/liaojiafa/p/12798025.html

实在是经典解说:

→针对windows平台

在此时需要安装mingw64做为前提,不然liteide就是水土不服的。必要时关闭360吧!

mingw64实是难搞,换了几个工具,如mingw installation manager,最后用mingw-w64-install.exe
启动后选择版本,posix和seh,这就生成了安装目录。
在安装过程中,把此前下载的源码包压缩包“mingw-w64-v8.0.0.zip”重新命名为“x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z”,放置在默认的目录中“x86_64-8.1.0-posix-seh-rt_v6-rev0”
最后,把安装的路径
C:\Program Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin
放到系统环境变量中。万事大吉。gcc,g++一应具全,随处可用。

GO111MODULE在windows上是没有auto可设置的,即便你使用liteide设置了,但go env中实际还是当它为on。

所以,系统底层仍设置为on,GOPATH目录内的源码编译成功,无论是否有go.mod。但要是GOPATH目录外的拥有go.mod文件(这是通过go mod init src生成的)可以编译成功。

当设置为off时,同时也得让GOPROXY为空,这时GOPATH和有go.mod的外部目录都可在命令行编译成功。所以,建议你还是使用命令行吧,因为,同一代码在命令行和liteide中结果不同,并且,保持on状态,保持代码不在GOPATH中。相信,go的发展也是会弃掉它。

→针对linux平台

GO111MODULE可以被liteide设置成auto.

这样设置的好处是模糊使用GOPATH(任何设置都OK)。而无论要编译的源码在任何目录都可以,且不用设置go.mod。

前台qt后台go起步

→参考指导:

环境:https://github.com/therecipe/qt/wiki

→therecipe/qt包的安装

先go get -u -v 不行就先下载,然后改名适配到代码中包引用的相应GOPATH中,然后再安装命令工具即cmd中的…。

重要是认清go get的本质就是一种git clone的包装。

go install  /home/tarena/code4DN/learn_gopath/src/github.com/therecipe/qt/cmd/...

不出意外是报错的,但看下面的解决问题内容。

→解决go端的环境的问题

https://blog.csdn.net/wzw_mzm/article/details/77618922

出现“找不到 golang.org/x/mod/module”问题,后来手工下载了golang.org/x/下面系列仓库,就是 git clone.

git clone https://github.com/golang/mod.git 
git clone https://github.com/golang/xerrors.git 
这是两个新加入的,一般没有它,已经可以运行demo.最终的完整支持包如下图

原始网上下载运行demo的命令如下,

go get -ldflags="-w" github.com/therecipe/examples/basic/widgets && $(go env GOPATH)/bin/widgets

它会直接运行一个弹出窗口,相应后台的操作是拷贝了代码并编译放在GOPATH/bin中,再运行。
本人已经下载过therecipe/qt包了,就是对应GOPATH下的

github.com/therecipe/examples/basic/widgets/main.go

→解决QT端的环境问题

以上集齐了龙珠。这里是锦上添花,因为,要充分使用QT的伎俩,就需要一套工具。
这时再次执行命令

go install  /home/tarena/code4DN/learn_gopath/src/github.com/therecipe/qt/cmd/...

命令成功使用之后

goqtuic的安装

go get -u -v github.com/stephenlyu/goqtuic

事实上没有这些工具也可以运行demo或QT库的代码。只要thericipe/qt包具备了就行。

总结跨平台

不管是windows还是linux下,都要在GOPATH/src下具备github.com和golang.org。前者里面有therecipe后者里面有x。同样的代码,都用Liteide编译,本地化成各自系统的风格。

静态库的go调用:(用GO来唤醒C的各种沉睡资源吧)
https://www.jianshu.com/p/b3fb41d7c33f

附录:

  • qtsetup会把qt的相应源码下载放置在go源码旁边,如果你有了mingw和gcc,它都会编译成静态库(.a的文件)给你。go帮你丰富环境真是全方位的。如果你是单独完全安装的qt环境,此处可以省略。很久以前,静态编译成window平台的QT库让你累疯,但现在mingw和go,让你永远不碰那个步骤了。
  • 翻墙参考:https://www.cnblogs.com/hupeng1234/p/9727170.html
  • qt如果要调试或用其它QT版本,有几个需要的环境变量比如QT_DIR。

华山论剑之编程语言

风云再起

有人的地方,就有江湖,有码农的地方,那里就有编程语言的分争。

二十年前,中国90%的程序员=写C语言的人。编程语言三分天下。
而现在,井喷一般出现了300种编程语言。主流圈子里有一个鄙视链的。科普BSL的意思:具体是无非是看英超的瞧不起看德甲的,看德甲的看不起看意甲的,看意甲的当然受不了看中超的,也许他们都看不起中超。
所以,编程语言中搞与机器语言关系近的就看不起底层的,底层就看不起表示层的,他们也有共同点,那就是看不起用HTML开发的。
有人说“Java天下第一”就有人跳出来“PHP是最好的语言,不接受反驳!”
江湖险恶环生,你看不起kotlin吧,可是全面兼容了java这个靠山,扶摇直上三千里。
Java帝国在Web编程领域受到了PHP, Python, Ruby 持续攻击, 被搞的灰头土脸, 但是帝国的基因和运气实在是好, 竟然又搭上了手机开发和大数据快班车, 成功开辟了新战场。

C语言显然沉寂很久了,它的“徒弟”们在圈里横行霸道。
尤其是C++,python,js,java,php。割据兵器谱,叱诧TIOBE。
注:TIOBE是一种开发语言排行榜,“兵器谱”会定期更新。类似于福布斯一样。武林大会盟主之排位实在是行业的风向标。

高徒列传

如果说自古功夫出少林,那么编程语言出于C。

看过《黑客与画家》想到,如果从绘画角度来论编程语言:
C,是用点线面,黑白灰的造型能力,代表作都是素描或中国画.工具包括铅笔(笔),橡皮(墨),白纸(宣纸),简单吧.
C++,是水彩图,你可以用大小不一的毛笔,和N种颜料的调色板了.
java和c#等后续语言,让这里创作变的多元化了,油画,版画,工艺画,工具则变的有了更多种。
python的话,就打开新时代的艺术创作了,当今天的漫画家和插画家,全面应用数位板,压感笔,配合photoshop,批量引入各种素材资源。

→远去的神话–C++

学完C++的人,很少说自己精通
网友A:“吃完自己收拾的是C++程序员,留在桌子上等别人收拾的是Java程序员。”

越早的语言,对内存的使用越要严格.
举例来说,越往古代,礼法也越多.
平辈,长辈之间说话,称谓和废话很多.
会交际的人,一定说的废话是最多的.因为,交际是起于废话的.
“您吃了”,”天气不错”,”最近工作顺利吗?”
可是,这些话就像是c/C++里的,free,析构函数,*pch_XXX=NULL;或空语句等.
在编译器面前,少了如上的这些”废话”,系统就像严厉的长辈(相当于你的太爷在世),让你吃不了兜着走.
做个”懂礼貌”的程序员,会让你写的代码更安全.

→闲话python

人生苦短,我用python

足见coder对它的喜爱,现在玩点什么高大上的都需要这个“神奇胶水”。这条蟒蛇伏在系统中等着你的招呼。
他已经观察了系统很久,也观察了你很久。你准备好粮食和水(第三方模块的安装),然后,启动它,让他出洞或入地掘金或飞上九宵。python没有复杂的“礼貌”和喜欢挑细节毛病的编译器。
王朔说:

第一个人说的,叫“知识分子”。第二个,第三个,还有不知道隔了多少代隔了多少辈,俗称“八杆子打不着的”,都叫“知道分子”。

中国春秋时期的诸子百家,早已哲学过了,做人做事,出世入世。中国一部分孔子门生,一部分老子影响。自然科学发展到今天,奇点邻近,突破太难。
程序员们,扪心自问,你知道了些什么?用android开发app,用框架开发应用。你知道的是什么,只是一些工具和名词。又有多了解android的底层和框架的内部组织?又或者说,你是否有必要去知道?
软件开发中算法更是,一将功成万古枯。所以,事实上留给你的区域很有限的,可能有人认为我比较消极,但发现比发明越发重要,那么坐上python,让你随时引据经典,前人或者牛人的知识总结打包放在你面前自助pick。

→java帝国

说它不好,会被吐沫淹死。
是造生态的专家,短板很少,简直是无所不能。
排行榜几乎没跌出过前五,大厂喜欢,大牛们天天用。

本人读书时,专业课程的最高分就是java,那时做Web就是用JSP,封装就是EJB。做企业应用方向就J2EE,移动方向J2ME。
而现在你如果列java的应用框架,可以有一大箩筐。
各招聘网站上,铺天盖地的关键字与java有关。

后浪的诞生–golang

不管如何,有一款打破BSL的,把链变成环的那就是golang。
听过新闻说,golang打算用go写编译器,即“排除掉C的代码”也称为自举。而且有很大的进展。
这让C很不舒服,的确有些“欺师灭祖”之嫌。这也是我的原始想法。
golang在见过林林总总的或高级/低级,或强类型/弱类型,或表示层/后台层,或编译的/解释的的语言后出生了,老爹是google,吸引众家之长为了是取代C++。辅佐大臣是docker,以太坊。
任何的新生语言如果没有以下的特征,就没有生命力,甚至相当于直接流产:(不讨论小语种,G=golang)

  • 开源
  • 拥有GC(C的法律允许它的臣民直接操作内存,执行效率极高,但是又对内存分配回收不管不顾,全部扔给子民们去处理。人生苦短,别浪费岁月在回收内存垃圾上了)
  • unicode编码支持(G默认是UTF-8)
  • 一招鲜(如果非要让G突出一点,那么绝对是为“并发”而生)
  • 拥抱互联网以及融入现有的生态(如果互联网的安全是“地气儿”那么G可以接上,君不见,玩云的公司也都玩G)

以上几点G做的相当好,再一起简单吐槽一圈“前浪”吧:
吸收着python语法特性的营养和解释性运行的特技。python说自己性能高,G就笑了!
见过java的繁重JVM和编译器,G就有了GC和不依赖三方的开源编译器,别忘记java的编译器还在oracle的手里。
C++哈,你终于来了,python可以笑你没有语法糖,java可以笑你没有手机和移动互联网,而G不说别的,你听过协程吗?
这时台下面举手的还有一大波儿想举手发言,什么js,php……,enough!今天的发布会就到这里。

→与C互访

简单就是美

为此G不屑于C++的花式包装。让全世界的G代码,看起来都是自己写的。
就目前来讲,调用C的最简单方案绝对是G。这便是C的基因。

原理:https://www.sohu.com/a/306764682_100111840
编译的时候会在PATH中寻找gcc,这也说明G事实上可以嵌入汇编语言

G调用C实战:

→敌我不分还是反朴归真

好吧,骂声之后,冷静下来。另一个维度升起。
近十多年,从未看过在一种“徒弟”语言中那么的尊重C这位“老师”。
所以,PHP,python,java等跳出来攻击G时,是一种狭隘的自我保护。
G才是那个能让师傅荣光焕发的,误解它的原因,可能是他太过出色,光环已然超载了老师。
他更适应这个时代,是未来一段时间内开发语言的“新宠”。