谷歌日前将自家的Go语言升级到了1.3正式版,新版本主要是更新了更精确的垃圾回收机制,解决了GC回收的问题。不过新版本开始也不再支持Windows2000,支持了Native Client虚拟机架构。
Google开放Go的代码,希望籍此帮助Go语言的发展。首席软件工程师Rob Pike说:我们开发Go,是因为近10年左右开发程序之难让我们有点沮丧。Google两年前开始开发Go,1年前开始有一只团队专职于此。Go的定位是系统编程,比如web服务器、存储系统和数据库等,但也欢迎在其它方面的应用。"
Go语言特点简介:1.引入轻量级线程——协程(coroutine),Go语言中叫goroutine。 2.采用Erlang风格的并发模型,即消息是进程间唯一的通信方式(而非共享内存)。两个goroutine之间通信通过channel(通道)进行。 3.对代码风格进行了强制统一,比如public变量必须以大写字母开头,private变量必须以小写字母开头,从而省略了这两个关键字。{}中{的书写不能另起一行等。 4.defer关键字,不管程序是否异常,均在退出时执行的代码。避免了大量try、catch语句。 5.函数允许返回多个值,且最后一个值问error类型,用于在错误的情况下返回详细信息。 6.反对(不提供)函数和操作符的重载,不提供继承、虚函数、虚函数重载。但是提供组合,也达到继承的目的。 7.没有构造函数和析构函数 ,提供接口,与其他语言最大的区别在于接口是非侵入性的。即实现类无需从接口派生 8.支持匿名函数与闭包。
为什么应该用Go?Go是为了帮助人们阅读、调试和维护大型软件系统而生的,所以目标是 不再缓慢 不再笨拙 提高效率 保持(甚至提升)扩展性 但是在使用C++或者Java开发中却常常遇到各种问题: 构建缓慢 依赖性难以控制 每个编程语言都使用不同的语言子集 程序难以理解(文档等原因) 重复工作 更新成本高 版本交叉 自动化不方便(工具问题)跨语言构建 而Go语言则是为了解决这些问题而设计的。 另外,C语言的依赖一直是个大问题,包括依赖叠加、编译时引入依赖的情况都很难处理,同时你也没办法查清哪些依赖是可以删除的,那些不可以。在C++中,这一点变得更加明显: 每个类里都有#include文件 #include文件中有代码(而不仅仅是声明) #ifndef的残留 所以一直无法在一台机器上构建大型Google二进制。(To build a large Google binary on a single computer is impractical.) 当然,工具确实很有帮助,于是做了如下改进: 新的分布式构建系统 不再需要Makefile(但仍然使用BUILD文件) 多缓存 多复杂度(大程序本身所具有的) 即使在Google的分布式构建系统的的帮助下,大型构建工程依然会花费不少时间(以其中一个二进制文件为例,在2007年花了45分钟,现在是27分钟)。生活质量还是太低。
更新日志:Go语言1.3正式版重点内容: 不再支持Windows 2000; 支持BSD和Solaris系统; 支持Native Client虚拟机架构; 内存模型更新; 增强垃圾收集器; Go命令增加很多新参数; 性能提升。
|