`
mryufeng
  • 浏览: 982221 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Go-lang特性介绍

阅读更多
Go Lang介绍
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内部也还是个试验项目。



  • 大小: 4 KB
分享到:
评论
48 楼 D调的华丽 2010-02-10  
需要的时候,才会去学习,暂时了解
47 楼 mryufeng 2010-02-09  
Element&lina 写道
一直徘徊再scala和groovy之间,现在又来个go。

世界变化快 但是GO和上面的没有重合  一个是系统语言 其他的是应用语言....
46 楼 Element&lina 2010-02-09  
一直徘徊再scala和groovy之间,现在又来个go。
45 楼 mikeandmore 2010-02-09  
chaoslawful 写道
bcccs 写道
mryufeng 写道
非常有前途的一门语言 有兴趣的同学一起来研究哦... 语言排行 目前第13, yeah

Go有两种编译器,其中cgo用gcc backend,优化更好,但coroutine是直接
映射到thread上,结果被Stackless Python的用户嘲笑了一番:编译比C
慢,而运行比Python慢。

“coroutine直接映射到thread上”这个怎么讲?
我看目前goroutine实际的实现很类似于erlang的轻量级进程,同样是将大量goroutine(内部简写为g)交给多个scheduler线程(内部简写为m)调度处理,当某个goroutine内发生系统调用时,其他ready的goroutine会交给空闲的或新创建的scheduler线程继续处理(新建scheduler线程不退出,形成自动增长的scheduler线程池),而当前scheduler线程会阻塞等待系统调用返回。调度期间并没有可见的大开销,跑的又是native code,如果比stackless python慢就有点儿匪夷所思了。

这不是coroutine吧。。。
44 楼 mryufeng 2010-02-08  
天才狐狸 写道
稍微有点麻烦的是必须linux环境,最近用了win7连虚拟机都装不了郁闷


最近支持比较多unix平台了.
43 楼 天才狐狸 2010-02-07  
稍微有点麻烦的是必须linux环境,最近用了win7连虚拟机都装不了郁闷
42 楼 java_fxj 2010-01-30  
额 ....
等排名第一的时候,再说吧....
不然,就杯具了...
41 楼 mryufeng 2010-01-27  
elmar 写道
mryufeng 写道
Pike指出,Go代码的编译基本上可以达到C语言的速度


C/C++语言的编译不是以慢出名的?


c和c++ 是2个语言好不好 我没说和c++一样快...
40 楼 elmar 2010-01-26  
mryufeng 写道
Pike指出,Go代码的编译基本上可以达到C语言的速度


C/C++语言的编译不是以慢出名的?
39 楼 rain2005 2010-01-26  
erlang,go在高并发的网络编程方面带来高开发效率C不可同日而语,但是就是有些傻X认为C就是无敌的这就没有办法了。
38 楼 mryufeng 2010-01-26  
bcccs 写道
mryufeng 写道
bcccs 写道
其实我要说go就是个better C,如果只是better C,我觉得我至少不需要,不知道谁需要。;

当然如果你觉得c是最好的和万能的 那么确实是不需要其他语言的...

c不是万能的。但是go让我看不到优势。


go有高级语言的开发效率和描述能力 同时内置了常用的库, 开发出来的东西还和c的效率差不多, 那么同样的工作,我花1/5完成,这个不是优势吗?
37 楼 bcccs 2010-01-26  
mryufeng 写道
bcccs 写道
其实我要说go就是个better C,如果只是better C,我觉得我至少不需要,不知道谁需要。;

当然如果你觉得c是最好的和万能的 那么确实是不需要其他语言的...

c不是万能的。但是go让我看不到优势。
36 楼 mryufeng 2010-01-25  
马背{eric.liu} 写道
掌握一门语言最好的方式,就是用它来写点东西了

mryufeng,有没有想用go来做个项目?


写了个上千行的代理程序...
35 楼 马背{eric.liu} 2010-01-25  
掌握一门语言最好的方式,就是用它来写点东西了

mryufeng,有没有想用go来做个项目?
34 楼 mryufeng 2010-01-25  
jetthink 写道
等google内部都开始go了再说

google要是有个大项目用了 那肯定已经火了...
33 楼 mryufeng 2010-01-25  
bcccs 写道
其实我要说go就是个better C,如果只是better C,我觉得我至少不需要,不知道谁需要。;

当然如果你觉得c是最好的和万能的 那么确实是不需要其他语言的...
32 楼 mryufeng 2010-01-25  
bcccs 写道
seen 写道
go那个吉祥物压根就是plan9一家的 土豆状啮齿类动物

连大量代码都是从plan9直接移植的。就算有google的招牌,估计会成为失败滴产品。


主要是编译代码移植的 其他的核心带阿命还是新写的哦...
31 楼 mryufeng 2010-01-25  
techabc 写道
mryufeng 写道
techabc 写道
请feng兄指示:
erlang和go各适用于什么类型的系统呢?

Go的定位 是系统编程,比如Web服务器、存储系统和数据库等,但也欢迎在其它方面的应用。  代替C语言做系统软件!


畅想一下:
erlang的VM如果由C换用go来实现,是不是会“功力”大增且开发效率噌噌上窜开发难度噌噌下跳呢?

erlang的vm register based已经很高效了 go和erlang的最大差别是一个是传统语言一个是函数式的...
30 楼 techabc 2010-01-25  
mryufeng 写道
techabc 写道
请feng兄指示:
erlang和go各适用于什么类型的系统呢?

Go的定位 是系统编程,比如Web服务器、存储系统和数据库等,但也欢迎在其它方面的应用。  代替C语言做系统软件!


畅想一下:
erlang的VM如果由C换用go来实现,是不是会“功力”大增且开发效率噌噌上窜开发难度噌噌下跳呢?
29 楼 贫嘴男孩 2010-01-23  
Trustno1 写道
mryufeng 写道
非常有前途的一门语言 有兴趣的同学一起来研究哦... 语言排行 目前第13, yeah

问题是名字起得不吉利
Go-lang=够烂?

或者说Go 浪

相关推荐

    go-lang-idea-plugin-master.zip_Go_ Go_ Go!_SelectorExpr golang_g

    本文将详细介绍"Go-lang-idea-plugin"这一专门为Go语言定制的IDEA插件,并深入探讨SelectorExpr在Go语言中的应用以及"golang-g"标签所代表的相关主题。 "Go-lang-idea-plugin"是IntelliJ IDEA社区版和专业版的一个...

    Go-go-lang-idea-plugin基于IntelliJ平台的GoogleGo语言IDE

    本文将详细介绍基于IntelliJ平台的Google Go语言IDE——go-lang-idea-plugin,带你深入理解其核心特性和使用方法。 go-lang-idea-plugin是一款由社区贡献并维护的IntelliJ IDEA插件,旨在为Go开发者提供完善的开发...

    go-lang[window][64位]安装包

    Go 语言,也被称为 Golang,是由 Google 开发的一种静态类型的、编译型的、并发型的、垃圾回收的编程语言。它旨在提高开发效率,同时保持代码的简洁性和可读性。Go 语言的设计受到了 C 语言的影响,但加入了现代编程...

    开源项目-goby-lang-goby.zip

    1. **Goby 语言特性**: Goby 语言的核心特点是结合了 Go 和 Ruby 的优点。Go 语言以其高效的执行速度、内置并发支持和强类型系统著称,而 Ruby 则以其优雅的语法和丰富的库生态系统受到开发者喜爱。Goby 试图在...

    Go-访问neural-redis的一个Go-lang接口

    在本文中,我们将深入探讨如何使用Go语言(Go-lang)来访问Neural Redis,这是一个将神经网络功能与Redis内存数据存储相结合的项目。Neural Redis提供了丰富的数据结构和高效的内存管理,结合神经网络的能力,使其...

    Go-进程管理工具supervisor的一个go-lang实现

    因此,"Go-进程管理工具supervisor的一个go-lang实现"为我们提供了一个基于Go语言的类似`supervisord`的功能。 这个Go语言版本的进程管理工具可能采用了Go语言的并发特性,如goroutines和channels,来实现多进程的...

    开源项目-gopher-lang-gopher.zip

    1. **语言特性**:可能对Go语言的语法、类型系统或内存管理等进行了调整或增强。例如,添加了新的关键字,或者改进了错误处理机制,使之更符合开发者习惯。 2. **性能优化**:Gopher-Lang可能会针对Go的编译器和...

    开源项目-gsp-lang-gsp.zip

    开源项目-gsp-lang-gsp.zip 是一个基于Go语言实现的Lisp编译器和环境的开源项目。这个项目旨在为开发者提供一个用Go语言构建的Lisp方言,它可能包括了源代码、编译工具、解释器以及相关的文档。下面我们将深入探讨这...

    开源项目-rooby-lang-rooby.zip

    这个项目,名为"rooby-lang-rooby.zip",旨在提供一种与Ruby语法相似的面向对象的语言,同时利用Go语言的强大性能和跨平台特性。 Rooby的主要目标是为开发者提供一个易于学习和使用的编程环境,特别是对已经熟悉...

    开源项目-ark-lang-ark.zip

    Ark 语言是一个开源的系统编程语言,其设计和实现由 Go 语言编写,并且采用了 LLVM 后端编译器基础设施。这个项目,名为 "ark-lang-ark.zip",旨在为开发者提供一种高效、安全且易于使用的编程工具,特别适合于系统...

    Go-megos-Go(lang)客户端用于一个ApacheMesos群集的消息

    【标题】:“Go-megos-Go(lang)客户端用于一个ApacheMesos群集的消息”指出,这个项目是用Go语言实现的一个客户端工具,专门用于与Apache Mesos集群进行交互和通信。Apache Mesos是一个分布式系统内核,它能有效地...

    rubik-go-lang:用Go实现Rubik Cube求解器算法

    总的来说,"rubik-go-lang"项目结合了Go语言的特性,对鲁比克魔方求解算法进行了实现实现,涉及到了数据结构、算法设计、状态表示、搜索策略等多个计算机科学领域的知识点。对于学习者来说,这是一个很好的实践平台...

    go-lang-people-api:用Golang编写的演示API

    【Go语言与API开发】 Go(也称为Golang)是由Google开发的一种静态类型的、编译式的、并发的、垃圾回收的、类型安全的、面向对象的编程语言。...同时,这也是一次了解Go语言并发特性和模块化设计的好机会。

    SimpleWebServer:Go-lang测试项目

    "SimpleWebServer:Go-lang测试项目" 这个标题表明这是一个使用Go语言(也称为Golang)编写的简易Web服务器项目,主要目的是进行测试和实践。Go语言是Google公司开发的一种静态类型、编译型、并发型且具有垃圾回收...

Global site tag (gtag.js) - Google Analytics