`

Go-lang特性介绍

    博客分类:
  • go
 
阅读更多

Go编程语言是Google中一些大牛(尤其是有着plan9前科的大牛们)如Rob Pike,Ken Thomason这两位赫赫有名的程序高手、技术作于2007年9月开始建造。 

Pike指出,Go代码的编译基本上可以达到C语言的速度,几乎可以在瞬间完成,“就像是在使用交互式语言”。现有的语言都没有针对多核心处理器进行优化,为了解决此类编程问题,Google工程师们开发了Go语言。从源文件的copyright可以看到,很多基础代码来自plan9. 

Go 已在Google公司内部测试过,但仍处于试验阶段。Google开放Go的代码,希望籍此帮助Go语言的发展。首席软件工程师Rob Pike说:我们开发Go,是因为近10年左右开发程序之难让我们有点沮丧。Google两年前开始开发Go,1年前开始有一只团队专职于此。目前只支持unix平台, windows平台的支持由于资源的原因,需要更多的参与者来移植。 
Go的定位 是系统编程,比如Web服务器、存储系统和数据库等,但也欢迎在其它方面的应用。 

Go语言的官方吉祥物如下
 

我看好Go的原因是: 这个语言不是凭空或者实验室设计的,而是填补过去10年在系统编程软件方面的不足。作为系统软件的编写者,经常会深深的感觉到目前常见语言的面对大规模的网络应用,在不断涌现的多核心硬件前的无奈, 纠缠在多线程和各种锁中间, 不停的制造各种各样的轮子, 低效的排错。Go拥有的这些现代特性都是系统用户梦迷以求的,经过作者全面的考虑,适当的取舍,即结合了动态语言的弹性,又有了静态语言的安全性和高性能。 

目前这个GO社区非常活跃,邮件列表里每天都有几百个讨论,加上有Google的强力支持, 个人认为非常有前途。 

那么GO能解决什么问题:
 
1. 硬件很快 软件开发很慢。 
2. 依赖很麻烦。 
3. c++ java太笨拙。 
4. 并行和gc 
5. 多核心机器的出现,未来几年128核心的机器都很常见。 

大部分的系统语言并不是设计来解决这些问题的,而且新涌现的大多数库并没有改善这些问题,相反加剧了。 

GO结合了动态语言的开发效率和静态编译型语言的安全性和运行效率,支持网络和多核编程,带给我们快速, 安全, 并发, 快乐。 

Go有着非常高的效率。 实际上golang.org就是用gdoc架设的。同时语言效能评测网站() Go和其他语言的对比,也充分说明了Go的效率和c语言很接近。 


GO的设计目标:
 
1。 系统编程语言。 
2. 快速编译和执行。 
3. 类型安全性和内存使用安全。 
4. 很好的支持并发计算。 
5. 高效,低延迟的垃圾回收算法。 

指导原则:
 
1. 减少bookkeeping。 
2. 更少的关键词,减少无谓的输入。无符号表设计使得语法分析,调试等大幅简单。 
3. 保持概念正交 
4. 保持简单。 
5. 减少类型,无类型层次,避免啰嗦。 

语言特性: 
清晰,精确的语法语法:大多数从c 继承, 包机制Pascal/Modula/Oberon family (declarations, packages),并发从(CSP)那里借鉴。 
大写符号导出符号。 
函数或者块开始注释是文档,用于gdoc处理。 
改进的If, case 复合语句,允许在条件前,执行语句。 Case 不支持自动fall throught, 必须显示说明。 Case支持多个判断。 

轻量的类型系统 
没有隐式的转换 
强类型,显式类型转化 
指针运算 slice代替 提供安全性 
通用类型:interface{} 
内置数组和字典 
支持面向对象编程,但是不支持层次继承。 
融合多种语言的特性,各个社区的人都会熟悉,特别是c, lua, python社区的用户非常容易上手。 

运行期: c和汇编实现内存的分配和收集,栈管理,轻量级协程,通讯管道,切片,Map以及反射等等基础设施。 

Gc:目前是用经典的简单的Mark And sweep 算法, 未来会采用更高效,低延迟的算法。 

库实现:
 
1. 完全用Go语言实现, 不依赖其他系统库 
2. 从接口库如xml, asn1,jonson, IO库,压缩,加密库等等,比较齐全,极大的方便了用户。 
支持unicode. 值得一提的是 Go的 “hello 世界”,很好的展示了对unicode支持。 

模块: 
Package管理。一个package可以分散在多个文件里,就好比在一个文件效果一样。 

扩展: 
Cgo 支持c和go编程混合,使得GO的扩展非常容易,让Cgo来做参数和类型的转换, 直接连接用户的c函数。 


Range:for语句支持通用的迭代,支持数组,字典,通讯管道。 特别是通讯管道结合goroutine, 由生产者负责在一端输入数据, range充当消费者, 从另外一端。。。,使得包容器的迭代实现非常的优雅和简单易懂。 

Type: 相当灵活的struct, 支持匿名字段,复用看起来很优雅。 

Interface: 
接口 类型 接口实现分离。Interface{}用来实现表示同样类型,用于实现保容器和参数省略。 

闭包:函数是第一类对象。有了闭包,我们很容易把数据和函数结合在一起,形成一个独立的执行体,无需关心数据的泄漏。 

反射(reflection):用于实现多参数和实现比如xml库,很直观的把结构的字段名和值映射起来,但是效率不高。 

Network 支持。支持tcp,udp,接口统一,但网络读写暂时无效的时候,net模块会自动把该句柄注册到系统的poll, 并且让出执行,等待读写事件的发生。一旦事件通知,net内部通过channel通知阻塞的句柄继续往下执行。从用户的使用角度来看,网络的读写都是顺序执行的,极大的简化了编程。 

Goroutine:Goroutines 是使得并发编程变得容易的核心。核心思想就是通过系统的线程来多路派遣独立函数的执行 单位协程。当一个协程阻塞的时候,比如说系统调用,调度器就会自动把其他协程安排到另外的线程去执行,从而保证了系统的不间断运行。 这个调度对于程序员是透明的,从用户的角度来看,协程在一直运行。而且这个调度的开销非常小,典型的CPU每秒钟可以调度百万次,使得我们可以创建大量的goroutine, 模拟现实世界的行为,大大的简化了程序的设计和实现。 

Channel: CSP的核心思想是通过消息共享, 而不是内存共享。 而消息共享机制就是通过channel来传递消息,有同步和异步之分。 Channel在生产者和消费者之间架设起沟通的桥梁。 

正是 Network+闭包+Goroutine+Channel让Go这么突出。 

目前存在的问题:
 
1. 语言的实现时间比较短,实现和社区都不够成熟,一些语言特性如select timeout还没有实现。 
2. 语言库和基于GO的应用还比较少,甚至在Google内部也还是个试验项目。 

分享到:
评论

相关推荐

    commons-lang3-3.12.0-API文档-中文版.zip

    赠送jar包:commons-lang3-3.12.0.jar; 赠送原API文档:commons-lang3-3.12.0-javadoc.jar; 赠送源代码:commons-lang3-3.12.0-sources.jar; 赠送Maven依赖信息文件:commons-lang3-3.12.0.pom; 包含翻译后的API...

    commons-lang3-3.9-API文档-中文版.zip

    赠送jar包:commons-lang3-3.9.jar; 赠送原API文档:commons-lang3-3.9-javadoc.jar; 赠送源代码:commons-lang3-3.9-sources.jar; 赠送Maven依赖信息文件:commons-lang3-3.9.pom; 包含翻译后的API文档:...

    commons-lang3-3.4-API文档-中文版.zip

    赠送jar包:commons-lang3-3.4.jar; 赠送原API文档:commons-lang3-3.4-javadoc.jar; 赠送源代码:commons-lang3-3.4-sources.jar; 赠送Maven依赖信息文件:commons-lang3-3.4.pom; 包含翻译后的API文档:...

    commons-lang3-3.3.2-API文档-中文版.zip

    赠送jar包:commons-lang3-3.3.2.jar; 赠送原API文档:commons-lang3-3.3.2-javadoc.jar; 赠送源代码:commons-lang3-3.3.2-sources.jar; 赠送Maven依赖信息文件:commons-lang3-3.3.2.pom; 包含翻译后的API文档...

    commons-lang3-3.7-API文档-中文版.zip

    赠送jar包:commons-lang3-3.7.jar; 赠送原API文档:commons-lang3-3.7-javadoc.jar; 赠送源代码:commons-lang3-3.7-sources.jar; 赠送Maven依赖信息文件:commons-lang3-3.7.pom; 包含翻译后的API文档:...

    commons-lang3-3.12.0-API文档-中英对照版.zip

    赠送jar包:commons-lang3-3.12.0.jar; 赠送原API文档:commons-lang3-3.12.0-javadoc.jar; 赠送源代码:commons-lang3-3.12.0-sources.jar; 赠送Maven依赖信息文件:commons-lang3-3.12.0.pom; 包含翻译后的API...

    commons-lang.rar

    commons-lang-1.0-b1.jar commons-lang-1.0.1.jar commons-lang-2.0.jar commons-lang-2.1-javadoc.jar commons-lang-2.1-sources.jar commons-lang-2.1.jar commons-lang-2.3.jar commons-lang-2.4-sources.jar ...

    commons-lang3-3.5-API文档-中文版.zip

    赠送jar包:commons-lang3-3.5.jar; 赠送原API文档:commons-lang3-3.5-javadoc.jar; 赠送源代码:commons-lang3-3.5-sources.jar; 赠送Maven依赖信息文件:commons-lang3-3.5.pom; 包含翻译后的API文档:...

    commons-lang-2.4-API文档-中文版.zip

    赠送jar包:commons-lang-2.4.jar; 赠送原API文档:commons-lang-2.4-javadoc.jar; 赠送源代码:commons-lang-2.4-sources.jar; 赠送Maven依赖信息文件:commons-lang-2.4.pom; 包含翻译后的API文档:commons-...

    开发工具 commons-lang3-3.4

    开发工具 commons-lang3-3.4开发工具 commons-lang3-3.4开发工具 commons-lang3-3.4开发工具 commons-lang3-3.4开发工具 commons-lang3-3.4开发工具 commons-lang3-3.4开发工具 commons-lang3-3.4开发工具 commons-...

    commons-lang-2.6.jar包

    commons-lang-2.6.jar包commons-lang-2.6.jar包commons-lang-2.6.jar包commons-lang-2.6.jar包commons-lang-2.6.jar包加源码

    commons-lang3-3.10-API文档-中文版.zip

    赠送jar包:commons-lang3-3.10.jar; 赠送原API文档:commons-lang3-3.10-javadoc.jar; 赠送源代码:commons-lang3-3.10-sources.jar; 赠送Maven依赖信息文件:commons-lang3-3.10.pom; 包含翻译后的API文档:...

    commons-lang3-3.10-API文档-中英对照版.zip

    赠送jar包:commons-lang3-3.10.jar; 赠送原API文档:commons-lang3-3.10-javadoc.jar; 赠送源代码:commons-lang3-3.10-sources.jar; 赠送Maven依赖信息文件:commons-lang3-3.10.pom; 包含翻译后的API文档:...

    commons-lang-2.4.rar代码及jar文件

    commons-lang-2.4.rar代码及jar文件

    commons-lang-2.6.jar

    commons-lang-2.6.jar工具包,web开发中常用的工具包。

    commons-lang的各个jar版本(2.4, 2,5, 2,6)

    commons-lang不同版本(commons-lang-2.4.jar,commons-lang-2.5.jar, commons-lang-2.5.jar),提供你所要的版本,让工程不再报错啊...

    commons-lang3-3.7 和 commons-lang-2.6 合集

    本资源包含 commons-lang3-3.7.jar 和 commons-lang-2.6.jar,适用不同版本

    开源项目-go-lang-plugin-org-go-lang-idea-plugin#pre-release-builds.zip

    开源项目-go-lang-plugin-org-go-lang-idea-plugin#pre-release-builds.zip,intellij ides的go插件现在集成了delve调试器

    common-lang-3.1.1-API文档-中文版.zip

    赠送jar包:common-lang-3.1.1.jar; 赠送原API文档:common-lang-3.1.1-javadoc.jar; 赠送源代码:common-lang-3.1.1-sources.jar; 赠送Maven依赖信息文件:common-lang-3.1.1.pom; 包含翻译后的API文档:common...

    commons-lang3-3.7-API文档-中英对照版.zip

    赠送jar包:commons-lang3-3.7.jar; 赠送原API文档:commons-lang3-3.7-javadoc.jar; 赠送源代码:commons-lang3-3.7-sources.jar; 赠送Maven依赖信息文件:commons-lang3-3.7.pom; 包含翻译后的API文档:...

Global site tag (gtag.js) - Google Analytics