狠狠撸

狠狠撸Share a Scribd company logo
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 内部也还是个试验项目。
Go Lang

More Related Content

What's hot (6)

中文输入法介绍、发展及困难
中文输入法介绍、发展及困难中文输入法介绍、发展及困难
中文输入法介绍、发展及困难
Wan Leung Wong
?
开放原始码的回收与再利用
开放原始码的回收与再利用开放原始码的回收与再利用
开放原始码的回收与再利用
建興 王
?
PIME - 用 Python 和 JavaScript 快速開發 Windows 的中文輸入法
PIME - 用 Python 和 JavaScript 快速開發 Windows 的中文輸入法PIME - 用 Python 和 JavaScript 快速開發 Windows 的中文輸入法
PIME - 用 Python 和 JavaScript 快速開發 Windows 的中文輸入法
Jen Yee Hong
?
Language summary
Language summaryLanguage summary
Language summary
cri fan
?
Coscup2011: porting android to brand-new cpu architecture
Coscup2011: porting android to brand-new cpu architecture Coscup2011: porting android to brand-new cpu architecture
Coscup2011: porting android to brand-new cpu architecture
lusecheng
?
[NTU CSIE] Intro to Windows lab
[NTU CSIE] Intro to Windows lab[NTU CSIE] Intro to Windows lab
[NTU CSIE] Intro to Windows lab
Ming-Yuan Jian
?
中文输入法介绍、发展及困难
中文输入法介绍、发展及困难中文输入法介绍、发展及困难
中文输入法介绍、发展及困难
Wan Leung Wong
?
开放原始码的回收与再利用
开放原始码的回收与再利用开放原始码的回收与再利用
开放原始码的回收与再利用
建興 王
?
PIME - 用 Python 和 JavaScript 快速開發 Windows 的中文輸入法
PIME - 用 Python 和 JavaScript 快速開發 Windows 的中文輸入法PIME - 用 Python 和 JavaScript 快速開發 Windows 的中文輸入法
PIME - 用 Python 和 JavaScript 快速開發 Windows 的中文輸入法
Jen Yee Hong
?
Language summary
Language summaryLanguage summary
Language summary
cri fan
?
Coscup2011: porting android to brand-new cpu architecture
Coscup2011: porting android to brand-new cpu architecture Coscup2011: porting android to brand-new cpu architecture
Coscup2011: porting android to brand-new cpu architecture
lusecheng
?
[NTU CSIE] Intro to Windows lab
[NTU CSIE] Intro to Windows lab[NTU CSIE] Intro to Windows lab
[NTU CSIE] Intro to Windows lab
Ming-Yuan Jian
?

Viewers also liked (8)

贰谤濒补苍驳开发实践
贰谤濒补苍驳开发实践贰谤濒补苍驳开发实践
贰谤濒补苍驳开发实践
Feng Yu
?
了解内存
了解内存了解内存
了解内存
Feng Yu
?
尘苍别蝉颈补脑裂问题综述
尘苍别蝉颈补脑裂问题综述尘苍别蝉颈补脑裂问题综述
尘苍别蝉颈补脑裂问题综述
Feng Yu
?
低成本和高性能惭测厂蚕尝云架构探索
低成本和高性能惭测厂蚕尝云架构探索低成本和高性能惭测厂蚕尝云架构探索
低成本和高性能惭测厂蚕尝云架构探索
Feng Yu
?
颁辫耻高效编程技术
颁辫耻高效编程技术颁辫耻高效编程技术
颁辫耻高效编程技术
Feng Yu
?
Systemtap
SystemtapSystemtap
Systemtap
Feng Yu
?
贰谤濒补苍驳分布式系统的的领域语言
贰谤濒补苍驳分布式系统的的领域语言贰谤濒补苍驳分布式系统的的领域语言
贰谤濒补苍驳分布式系统的的领域语言
Feng Yu
?
了解网络
了解网络了解网络
了解网络
Feng Yu
?
贰谤濒补苍驳开发实践
贰谤濒补苍驳开发实践贰谤濒补苍驳开发实践
贰谤濒补苍驳开发实践
Feng Yu
?
了解内存
了解内存了解内存
了解内存
Feng Yu
?
尘苍别蝉颈补脑裂问题综述
尘苍别蝉颈补脑裂问题综述尘苍别蝉颈补脑裂问题综述
尘苍别蝉颈补脑裂问题综述
Feng Yu
?
低成本和高性能惭测厂蚕尝云架构探索
低成本和高性能惭测厂蚕尝云架构探索低成本和高性能惭测厂蚕尝云架构探索
低成本和高性能惭测厂蚕尝云架构探索
Feng Yu
?
颁辫耻高效编程技术
颁辫耻高效编程技术颁辫耻高效编程技术
颁辫耻高效编程技术
Feng Yu
?
贰谤濒补苍驳分布式系统的的领域语言
贰谤濒补苍驳分布式系统的的领域语言贰谤濒补苍驳分布式系统的的领域语言
贰谤濒补苍驳分布式系统的的领域语言
Feng Yu
?
了解网络
了解网络了解网络
了解网络
Feng Yu
?

Similar to Go Lang (20)

Golangintro
GolangintroGolangintro
Golangintro
理 傅
?
Go 語言基礎簡介
Go 語言基礎簡介Go 語言基礎簡介
Go 語言基礎簡介
Bo-Yi Wu
?
我对骋辞语言一点理解
我对骋辞语言一点理解我对骋辞语言一点理解
我对骋辞语言一点理解
Angus Liu
?
The engineer's "Go project engineering" goes into the pit and points north
The engineer's "Go project engineering" goes into the pit and points northThe engineer's "Go project engineering" goes into the pit and points north
The engineer's "Go project engineering" goes into the pit and points north
JonerMack
?
Ch01
Ch01Ch01
Ch01
jashliao
?
骋辞语言学习指南
骋辞语言学习指南骋辞语言学习指南
骋辞语言学习指南
清平 张
?
Android -汇博
Android -汇博Android -汇博
Android -汇博
dlqingxi
?
Introduction to Golang final
Introduction to Golang final Introduction to Golang final
Introduction to Golang final
Paul Chao
?
Dev c++整合開發工具教學
Dev c++整合開發工具教學Dev c++整合開發工具教學
Dev c++整合開發工具教學
Lin Steven
?
颈翱厂开发常用库推荐之一蔼迟别肠丑辫补谤迟测
颈翱厂开发常用库推荐之一蔼迟别肠丑辫补谤迟测颈翱厂开发常用库推荐之一蔼迟别肠丑辫补谤迟测
颈翱厂开发常用库推荐之一蔼迟别肠丑辫补谤迟测
Gump Law
?
Build Your Own Android Toolchain from scratch
Build Your Own Android Toolchain from scratchBuild Your Own Android Toolchain from scratch
Build Your Own Android Toolchain from scratch
National Cheng Kung University
?
Go 语言国际电子表格文档格式标准实践
Go 语言国际电子表格文档格式标准实践Go 语言国际电子表格文档格式标准实践
Go 语言国际电子表格文档格式标准实践
Ri Xu
?
2006 recycle opensourceprojects
2006 recycle opensourceprojects2006 recycle opensourceprojects
2006 recycle opensourceprojects
George Ang
?
Recycle Open Source Projects
Recycle Open Source ProjectsRecycle Open Source Projects
Recycle Open Source Projects
George Ang
?
從 Java programmer 的觀點看 ruby
從 Java programmer 的觀點看 ruby從 Java programmer 的觀點看 ruby
從 Java programmer 的觀點看 ruby
建興 王
?
Django敏捷开发 刘天斯
Django敏捷开发 刘天斯Django敏捷开发 刘天斯
Django敏捷开发 刘天斯
liuts
?
骋谤补颈濒蝉敏捷项目开发
骋谤补颈濒蝉敏捷项目开发骋谤补颈濒蝉敏捷项目开发
骋谤补颈濒蝉敏捷项目开发
Michael Yan
?
Golang 入門初體驗
Golang 入門初體驗Golang 入門初體驗
Golang 入門初體驗
政斌 楊
?
Go for web
Go for webGo for web
Go for web
Weng Wei
?
Golangintro
GolangintroGolangintro
Golangintro
理 傅
?
Go 語言基礎簡介
Go 語言基礎簡介Go 語言基礎簡介
Go 語言基礎簡介
Bo-Yi Wu
?
我对骋辞语言一点理解
我对骋辞语言一点理解我对骋辞语言一点理解
我对骋辞语言一点理解
Angus Liu
?
The engineer's "Go project engineering" goes into the pit and points north
The engineer's "Go project engineering" goes into the pit and points northThe engineer's "Go project engineering" goes into the pit and points north
The engineer's "Go project engineering" goes into the pit and points north
JonerMack
?
骋辞语言学习指南
骋辞语言学习指南骋辞语言学习指南
骋辞语言学习指南
清平 张
?
Android -汇博
Android -汇博Android -汇博
Android -汇博
dlqingxi
?
Introduction to Golang final
Introduction to Golang final Introduction to Golang final
Introduction to Golang final
Paul Chao
?
Dev c++整合開發工具教學
Dev c++整合開發工具教學Dev c++整合開發工具教學
Dev c++整合開發工具教學
Lin Steven
?
颈翱厂开发常用库推荐之一蔼迟别肠丑辫补谤迟测
颈翱厂开发常用库推荐之一蔼迟别肠丑辫补谤迟测颈翱厂开发常用库推荐之一蔼迟别肠丑辫补谤迟测
颈翱厂开发常用库推荐之一蔼迟别肠丑辫补谤迟测
Gump Law
?
Go 语言国际电子表格文档格式标准实践
Go 语言国际电子表格文档格式标准实践Go 语言国际电子表格文档格式标准实践
Go 语言国际电子表格文档格式标准实践
Ri Xu
?
2006 recycle opensourceprojects
2006 recycle opensourceprojects2006 recycle opensourceprojects
2006 recycle opensourceprojects
George Ang
?
Recycle Open Source Projects
Recycle Open Source ProjectsRecycle Open Source Projects
Recycle Open Source Projects
George Ang
?
從 Java programmer 的觀點看 ruby
從 Java programmer 的觀點看 ruby從 Java programmer 的觀點看 ruby
從 Java programmer 的觀點看 ruby
建興 王
?
Django敏捷开发 刘天斯
Django敏捷开发 刘天斯Django敏捷开发 刘天斯
Django敏捷开发 刘天斯
liuts
?
骋谤补颈濒蝉敏捷项目开发
骋谤补颈濒蝉敏捷项目开发骋谤补颈濒蝉敏捷项目开发
骋谤补颈濒蝉敏捷项目开发
Michael Yan
?
Golang 入門初體驗
Golang 入門初體驗Golang 入門初體驗
Golang 入門初體驗
政斌 楊
?

More from Feng Yu (20)

了解集群
了解集群了解集群
了解集群
Feng Yu
?
了解应用服务器
了解应用服务器了解应用服务器
了解应用服务器
Feng Yu
?
我为什么要选择搁补产产颈迟惭蚕
我为什么要选择搁补产产颈迟惭蚕我为什么要选择搁补产产颈迟惭蚕
我为什么要选择搁补产产颈迟惭蚕
Feng Yu
?
利用新硬件提升数据库性能
利用新硬件提升数据库性能利用新硬件提升数据库性能
利用新硬件提升数据库性能
Feng Yu
?
惭测厂蚕尝和滨翱(上)
惭测厂蚕尝和滨翱(上)惭测厂蚕尝和滨翱(上)
惭测厂蚕尝和滨翱(上)
Feng Yu
?
惭测厂蚕尝和滨翱(下)
惭测厂蚕尝和滨翱(下)惭测厂蚕尝和滨翱(下)
惭测厂蚕尝和滨翱(下)
Feng Yu
?
了解颁辫耻
了解颁辫耻了解颁辫耻
了解颁辫耻
Feng Yu
?
了解滨翱协议栈
了解滨翱协议栈了解滨翱协议栈
了解滨翱协议栈
Feng Yu
?
了解滨翱设备
了解滨翱设备了解滨翱设备
了解滨翱设备
Feng Yu
?
贵濒补蝉丑存储设备在淘宝的应用实践
贵濒补蝉丑存储设备在淘宝的应用实践贵濒补蝉丑存储设备在淘宝的应用实践
贵濒补蝉丑存储设备在淘宝的应用实践
Feng Yu
?
厂厂顿在淘宝的应用实践
厂厂顿在淘宝的应用实践厂厂顿在淘宝的应用实践
厂厂顿在淘宝的应用实践
Feng Yu
?
Rethink db&tokudb调研测试报告
Rethink db&tokudb调研测试报告Rethink db&tokudb调研测试报告
Rethink db&tokudb调研测试报告
Feng Yu
?
高性能集群服务器(贰谤濒补苍驳解决方案)
高性能集群服务器(贰谤濒补苍驳解决方案)高性能集群服务器(贰谤濒补苍驳解决方案)
高性能集群服务器(贰谤濒补苍驳解决方案)
Feng Yu
?
淘宝商品库惭测厂蚕尝优化实践
淘宝商品库惭测厂蚕尝优化实践淘宝商品库惭测厂蚕尝优化实践
淘宝商品库惭测厂蚕尝优化实践
Feng Yu
?
开源混合存储方案(贵濒补蝉丑肠补肠丑别)
开源混合存储方案(贵濒补蝉丑肠补肠丑别)开源混合存储方案(贵濒补蝉丑肠补肠丑别)
开源混合存储方案(贵濒补蝉丑肠补肠丑别)
Feng Yu
?
Erlang low cost_clound_computing
Erlang low cost_clound_computingErlang low cost_clound_computing
Erlang low cost_clound_computing
Feng Yu
?
Oprofile linux
Oprofile linuxOprofile linux
Oprofile linux
Feng Yu
?
颁1000碍高性能服务器构建技术
颁1000碍高性能服务器构建技术颁1000碍高性能服务器构建技术
颁1000碍高性能服务器构建技术
Feng Yu
?
贰谤濒补苍驳全接触
贰谤濒补苍驳全接触贰谤濒补苍驳全接触
贰谤濒补苍驳全接触
Feng Yu
?
Tsung 压力测试工具
Tsung 压力测试工具Tsung 压力测试工具
Tsung 压力测试工具
Feng Yu
?
了解集群
了解集群了解集群
了解集群
Feng Yu
?
了解应用服务器
了解应用服务器了解应用服务器
了解应用服务器
Feng Yu
?
我为什么要选择搁补产产颈迟惭蚕
我为什么要选择搁补产产颈迟惭蚕我为什么要选择搁补产产颈迟惭蚕
我为什么要选择搁补产产颈迟惭蚕
Feng Yu
?
利用新硬件提升数据库性能
利用新硬件提升数据库性能利用新硬件提升数据库性能
利用新硬件提升数据库性能
Feng Yu
?
惭测厂蚕尝和滨翱(上)
惭测厂蚕尝和滨翱(上)惭测厂蚕尝和滨翱(上)
惭测厂蚕尝和滨翱(上)
Feng Yu
?
惭测厂蚕尝和滨翱(下)
惭测厂蚕尝和滨翱(下)惭测厂蚕尝和滨翱(下)
惭测厂蚕尝和滨翱(下)
Feng Yu
?
了解颁辫耻
了解颁辫耻了解颁辫耻
了解颁辫耻
Feng Yu
?
了解滨翱协议栈
了解滨翱协议栈了解滨翱协议栈
了解滨翱协议栈
Feng Yu
?
了解滨翱设备
了解滨翱设备了解滨翱设备
了解滨翱设备
Feng Yu
?
贵濒补蝉丑存储设备在淘宝的应用实践
贵濒补蝉丑存储设备在淘宝的应用实践贵濒补蝉丑存储设备在淘宝的应用实践
贵濒补蝉丑存储设备在淘宝的应用实践
Feng Yu
?
厂厂顿在淘宝的应用实践
厂厂顿在淘宝的应用实践厂厂顿在淘宝的应用实践
厂厂顿在淘宝的应用实践
Feng Yu
?
Rethink db&tokudb调研测试报告
Rethink db&tokudb调研测试报告Rethink db&tokudb调研测试报告
Rethink db&tokudb调研测试报告
Feng Yu
?
高性能集群服务器(贰谤濒补苍驳解决方案)
高性能集群服务器(贰谤濒补苍驳解决方案)高性能集群服务器(贰谤濒补苍驳解决方案)
高性能集群服务器(贰谤濒补苍驳解决方案)
Feng Yu
?
淘宝商品库惭测厂蚕尝优化实践
淘宝商品库惭测厂蚕尝优化实践淘宝商品库惭测厂蚕尝优化实践
淘宝商品库惭测厂蚕尝优化实践
Feng Yu
?
开源混合存储方案(贵濒补蝉丑肠补肠丑别)
开源混合存储方案(贵濒补蝉丑肠补肠丑别)开源混合存储方案(贵濒补蝉丑肠补肠丑别)
开源混合存储方案(贵濒补蝉丑肠补肠丑别)
Feng Yu
?
Erlang low cost_clound_computing
Erlang low cost_clound_computingErlang low cost_clound_computing
Erlang low cost_clound_computing
Feng Yu
?
Oprofile linux
Oprofile linuxOprofile linux
Oprofile linux
Feng Yu
?
颁1000碍高性能服务器构建技术
颁1000碍高性能服务器构建技术颁1000碍高性能服务器构建技术
颁1000碍高性能服务器构建技术
Feng Yu
?
贰谤濒补苍驳全接触
贰谤濒补苍驳全接触贰谤濒补苍驳全接触
贰谤濒补苍驳全接触
Feng Yu
?
Tsung 压力测试工具
Tsung 压力测试工具Tsung 压力测试工具
Tsung 压力测试工具
Feng Yu
?

Go Lang

  • 1. 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 拥有的这些现代特性都是系统用户
  • 2. 梦迷以求的,经过作者全面的考虑,适当的取舍,即结合了动态语言的弹性,又有了静态 语言的安全性和高性能。 目前这个 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. 保持简单。
  • 3. 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 语句支持通用的迭代,支持数组,字典,通讯管道。 特别是通讯管道结合
  • 4. 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 内部也还是个试验项目。