标签 Opensource 下的文章

也谈Go语言代码包分发

Go语言目前(截至1.0.2版本)尚不支持直接链接.a文件(这里的.a文件指的不是传统静态共享库,而是对golang的非main包build后的产物)。这样一来Go的第三方库包或组织内部的公共代码库包只能以源码的形式分发了。

Go提供了get命令用于获取他人分发的代码包。我们通过get命令既可以获取一些知名代码托管站点上的代码,也可以获取组织内部版本控制服务器上的公共代码。

Go get支持的托管站点包括github、google code、BitBucket以及Launchpad,针对这类情况,我们可以得到“特殊”语法的照顾:

go get github.com/bmizerany/assert
go get bitbucket.org/bmizerany/assert
go get code.google.com/p/assert
go get launchpad.net/assert

由于Go已经“内置”了github、google code等的版本控制工具类型,因此我们无需再做任何额外指定,只需用代码的url(去掉http://)即可。

执行get后,代码会被下载到GOPATH环境变量配置中的第一个路径下的src目录下面。例如:我们的GOPATH=/home/tonybai /goworkspace1:/home/tonybai/goworkspace2,执行go get github.com/bmizerany/assert后,我们将在/home/tonybai/goworkspace1下看到github.com 目录,而assert包在本地的完整路径就是/home/tonybai/goworkspace1/github.com/bmizerany /assert。这样我们在代码中直接import "github.com/bmizerany/assert"即可使用assert这个第三方包了。

在组织内部我们也会有自己的私有公共代码库,一份代码库可能被多个项目所使用。在每个项目中都保存一份公共库代码显然是不利于后续版本升级维护的,这样就需要各个项目统一从同一个地方获取或更新公共库代码。这种情况我们同样可以用go get命令来做。

假设内部使用subversion作为版本控制工具,公共库架设在10.10.12.13/svn0/share/golib。这时我们不能简单地的通 过"go get 10.10.12.13/svn0/share/golib"来获取到代码,我们需要告诉get我们采用哪种版本控制工具,而这种信息的传递是通过在库名称后面加上后缀的方式进行的。比如:

go get "10.10.12.13/svn0/share/golib.svn"

这样在/home/tonybai/goworkspace1下就会出现10.10.12.13/svn0/share/golib.svn目录结构。我 们在代码中可以直接import对应的包,比如import "10.10.12.13/svn0/share/golib.svn/assert"。

通过对get命令特性的了解,我们也可以确定分发的代码包到底应该如何组织。从上面的例子我们可以看出我们分发的代码包结构不需很复杂,直接在库的 repository下建立包目录即可,比如上面例子中库repository为golib,assert就是直接建立在下面的目录,同时也是包名。

go get可自动识别http_proxy环境变量,这样Go也可以通过代理获取外部代码包。

使用外部代码包的项目可以通过go get -u url来更新代码包版本为最新版本。

编程语言进入“拼爹”时代

近期看到一则新闻,说是Microsoft推出了一门开源的编程语言叫TypeScript,该Project的主要负责人是大名鼎鼎的Anders Hejlsberg,就是那个Turbo Pascal Delphi以及C#之父。结合近几年来出现的颇受关注的其他几门编程语言,如GoRustDart等,让我感觉到编程语言似乎进入了"拼爹"时代。

我们来列举一下这几门新兴语言的“老爹”(设计者):

* Go语言 – Robert Griesemer、Rob PikeKen Thompson
这里最著名也最NB的当属Ken Thompson,Unix之父,并与Dennis Ritchie一起创造了最伟大的工业编程语言C图灵奖得主。Rob Pike也是Bell Labs元老,Unix和Plan 9计划的参与者,Limbo语言的设计者之一。至于Robert Griesemer名气似乎小一些,我也不甚熟悉。不过有了前两位,想必Golang就会有足够的号召力了。

* Rust语言 – 来自著名的Mozilla Lab,其主要设计者包括Brendan Eich,Dave Herman以及Graydon Hoare。其中Brendan Eich是JavaScript语言之父。

* Dart语言 – 这门语言的最初两个设计者Lars Bak和Kasper Lund似乎并不著名,但这门语言背后有一个更大的后台,那就是在互联网搜索时代叱诧风云的Google公司。凭借着Google的号召力,围绕在这门语 言周围的Fans也应该为数不少。再考虑这门语言旨在替代JavaScript成为新Html5标准下主力Web开发语言的目标,Dart受到的关注一定 不少。

这里再顺便回顾一下编程语言发展的几个历史时期(个人的一点拙见)。

* 结构化时代
20世纪六七十年代,以C、Fortran、Pascal、Basic为代表的结构化程序设计语言的诞生,标志着编程语言进入了结构化时代。人们逐渐脱离 生产效率低下的汇编,而转移到中级/高级语言行列。最终C以其Unix平台语言的身份胜出,并以其简洁高效的生成代码在二十世纪末期在嵌入式领域独占鳌 头。

* OO时代
随着人们的关注点逐渐向问题域转移,人们迫切需要一门能对现实问题进行更好抽象的语言。面向对象语言逐渐进入人们的视野。代表语言包括C++、Ada、 Delphi、Java以及C#等。C++和Delphi因其卓越的性能以及不熟的IDE支持,在桌面程序设计领域(包括PC游戏领域)成为主角。 Java则在企业应用兴起后逐渐发展壮大,最终成为OO时代的No.1。

* Web时代
随着全球互联网时代的到来,诸多Web语言走到了前台,代表语言包括PHP、JavaScript、ASP等,另外一些轻巧且生产高效的脚本语言也开始被 大家所青睐,它们既能轻松完成系统管理的任务又支持Web开发,这其中的代表语言包括:Perl、Python、Ruby、Lua等。

* 新时代
这里暂且叫作新时代,这个时代有几个特点:
1) 传统语言不断翻新,融入新特性
C和C++于今年发布了C11标准;Java也给出了JDK8规范的发布时间表。在新标准中,这些传统语言也加入了一些适宜这个时代开发的新特性,比如函数范式以及对多核并行程序的支持。

2) 终端开发语言迅速崛起
随着iPhone和Android的迅速发展,终端开发语言逐渐壮大,最典型的代表则是Objective-C,依靠苹果公司这棵大树,与C++同时期的Objective-C仿佛坐着火箭一般迅速串升到编程语言排行榜前3甲的位置。

3) 函数式语言的回归
以Common Lisp、Haskell、Erlang等为代表的函数式程序设计语言重装归来,誓与传统命令式语言一绝高下。函数式范型语言的回归意义似乎不在于占领更 大的市场,而是在于其对后续新兴编程语言的设计决策的影响,甚至像C++这样的老牌OO语言在新规范中也加入了函数式范型的支持。

4) "拼爹"的新兴语言
就如上面所讲的,一些传统语言的设计大师汲取之前语言的设计经验和教训后,二次出手,设计出了以Go、Rust、TypeScript等为代表的新兴语 言,并且他们的号召力对这些新兴语言有着很大的影响。这些语言站在巨人的肩膀上,获得了重新的设计,使得语言能满足未来市场对应用程序以及硬件设备的要 求。这些语言将会是未来10年乃至20年间编程领域的主力。

目前的确是编程语言的一个新时代,更是一个百花齐放,百家争鸣的时代。作为这个时代的程序员是幸运的,因为有这么多优秀语言可供学习和选择;同时也是"不幸的",有这么多语言要去学习(当然也可以不学^_^)。

如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! Go语言第一课 Go语言精进之路1 Go语言精进之路2 Go语言编程指南
商务合作请联系bigwhite.cn AT aliyun.com

欢迎使用邮件订阅我的博客

输入邮箱订阅本站,只要有新文章发布,就会第一时间发送邮件通知你哦!

这里是 Tony Bai的个人Blog,欢迎访问、订阅和留言! 订阅Feed请点击上面图片

如果您觉得这里的文章对您有帮助,请扫描上方二维码进行捐赠 ,加油后的Tony Bai将会为您呈现更多精彩的文章,谢谢!

如果您希望通过微信捐赠,请用微信客户端扫描下方赞赏码:

如果您希望通过比特币或以太币捐赠,可以扫描下方二维码:

比特币:

以太币:

如果您喜欢通过微信浏览本站内容,可以扫描下方二维码,订阅本站官方微信订阅号“iamtonybai”;点击二维码,可直达本人官方微博主页^_^:
本站Powered by Digital Ocean VPS。
选择Digital Ocean VPS主机,即可获得10美元现金充值,可 免费使用两个月哟! 著名主机提供商Linode 10$优惠码:linode10,在 这里注册即可免费获 得。阿里云推荐码: 1WFZ0V立享9折!


View Tony Bai's profile on LinkedIn
DigitalOcean Referral Badge

文章

评论

  • 正在加载...

分类

标签

归档



View My Stats