SlideShare une entreprise Scribd logo
1  sur  2
Télécharger pour lire hors ligne
系统编程语言明日之星—Go
               ■ 文 / 余锋




                            G
                                   o 语言由Google 提供支持,于2007 年        了动态语 言的弹性 , 又有了静态语言的安全性
                                   9 月开始浮出水面 , 出自 Rob Pike、        和高性能 。Rob Pike 指出 Go 代码的编译基本
                                   Ken Thomason 等大师之手 , 是一种        上可以达到 C 语言的速度 , 几乎可以在瞬间完
                            支持并发和垃圾回收的编译型编程语言。                     成 。 而在运行效率上已经和 C 语言很接近 , 同
                               Go 语言是基于 BSD 许可发行的开源项目 ,            时支持多核心并发运算 。 来自语言性能比较网
                            目前只支持Linux、Mac OS X和Windows平台。         站 Computer Language Benchmarks Game
                            由于团队资源及社区规模的限制 , 目前 Go 还无              的数据也验证了这一点 。 目前这个 Go 社区非常
                            法支持更多的操作系统,因此需要更多的参与者                  活跃 , 新的特性和包在不断地被提出和加入 ,
                            来进行移植。                                 加上有 Google 在背后强力支持和推广 , 个人认
              作者简介:            Go 语言创建伊始 , 就目标明确 —— 创建一            为应用前景非常广阔 。
Cover Story




              余锋,就职于淘宝核心系   种高性能 、 开发迅速 、 安全且富有趣味的系统
              统研发部。多年C和网络
              开发经验,专注于高性    编程语言 。 各种高性能的网络服务器 、 文件存               Go能解决什么问题呢?
              能、容错、分布式服务器
                            储系统 、 数据库等 , 都非常适合使用 Go 进行开               我们在编写系统程序时总是会面临以下挑
              的研究和实现。
                            发 。 当然 Go 也可以运用在其他领域 ,Go 的官            战 : 第一 , 硬件发展得很快 , 软件技术总是突
                            方网站 golang.org 就是使用 gdoc 实现的 。         破得很慢 ; 第二 , 复杂的系统依赖性很强 , 平
                               Go 已经在 Google 公司内部尝试使用 , 但          台 、 库 、 管理这些依赖相当麻烦 ; 第三 , 目前
封面报道




                            是并没有大规模地部署,因此仍处于试验阶                    可用的系统语言如 C++、Java 太笨拙 , 也太复
                            段 , 需要丰富的测试和考验 。                       杂 , 在处理复杂情况时感觉力不从心 ; 第四 ,
                               Go已经给了我们一个华丽的亮相,在工                  复杂的内存管理和资源管理 ; 第五 , 多核心机
                            程层面,Go语言官方目前还没有自己的编辑                   器的涌现 , 在未来几年里面 128 核心的机器应
                            器 , 但是发布包带了 Emacs、VI 以及 Xcode          该会很常见 , 我们难道还是用最原始的线程 机
                            的插件 , 方便用户的编辑 。 它目前有 2 个编译             制和同步原语来面对 ?
                            器 : 源于 Plan9 的 Native 8/6g 编译器和以 GCC      大部分系统语言并不是设计来解决这些问
                            为后端的 Gccgo。 Gccgo 能编译出来更高效的            题的,而且新涌现的大多数程序库也并没有
                            代码 , 还可以和其他的 gcc 库相链接 。 但是遗            改善这些问题 , 相反加剧了复杂度 。 正如 Rob
                            憾的是 Gccgo 尚未实现垃圾收集 ,Goroutine          Pike 说 :“ 我们开发 Go, 是因为近 10 年来开
                            通过 pthread 实现 , 调度开销大且栈空间占用            发系统程序之难让我们有点沮丧 。 这时候 Go
                            多 , 而且编译时间较长 , 无法在实际项目中使               来拯救我们啦 !”
                            用 。 排错器和调优器目前还不大可用 。
                               我看好 Go 的原因是 , 这个语言不是凭空或             设计目标
                            者实验室设计的 , 而是填补过去 10 年在系统编                  系统编程语言
                            程软件方面的不足 。 作为系统软件的编写者 ,                    快速编译和执行
                            经常会深深地感到目前常见系统语言在面对大                       类型安全性和内存使用安全
                            规模网络应用的力不从心 , 在不断涌现的多核                     很好的支持并发计算
                            心硬件前的无奈 , 在多线程和各种锁中间的痛                     高效低延迟的垃圾回收算法
                            苦 , 在不停地制造各种各样的轮子的困惑 , 以
                            及在使用很原始的排错器的低效 。Go 拥有的这                设计原则
                            些现代特性都是系统用户梦寐以求的 , 既结合                     更少的关键词 , 减少无谓的输入

              64   程序员
保持概念正交                                     息 , 有同步和异步之分 。Channel 在生产者和消费者之间
    保持简单                                       架设起沟通的桥梁 , 承担起传统语言消息队列的作用 。
    减少类型 , 无类型层次 , 避免罗嗦                           Goroutine:Goroutine 是使并发编程变得容易的核
                                               心 。 实现上是通过系统的线程来多路派遣协程 , 使得函数
语言特性                                           的执行看起来独立 。 当一个协程阻塞的时候 , 比如说费时
   G o 语 言 脱胎 于 C 语 言 , 同 时 还 从社 区 的 其 他语 言如   的系统调用 , 调度器就会自动把其他协程安排到另外的线
Pascal、 CSP、Occam 借鉴了很多特性 , 添加了如包管             程去执行 , 从而保证了系统的不间断运行 。 这个调度对于
理、反射、 垃圾回收器、动态类型、并发以及并行机制等。                    程序员是透明的 , 从用户的角度来看 , 协程在一直运行 。
   它有一些有趣的特性 :                                 而且这个调度的开销非常小 , 典型的 CPU 每秒钟可以调度
    融合多种语言的特性 , 各个社区的人都感觉会很熟                   百万次 , 协程还支持堆栈的自增 。 这两个设计使得我们可
悉 , 特别是 C、Lua、Python 社区的用户非常容易上手 。             以创建大量的 goroutine, 模拟现实世界对象的行为 , 大
    支持面向对象编程 , 但是不支持层次继承 。                     大简化了程序的设计和实现 。
    清晰 、 精确的语法 。                                  Network 支持 : 目前支持 Tcp/Udp 协议 , 有统一的编
    大写符号导出公共符号 , 小写是私有的 。                      程接口 , 方便未来支持更多的协议 , 通过内核 POLL 支持
    函数或者块开始注释是文档 , 方便 gdoc 生成文档 。              成千上万的并发连接 。 在网络读写暂时无效的时候 , 网络
    改进的 If、Case 复合语句 , 允许在条件判定前 , 执            模块会自动把该句柄注册到系统的 poll set, 并且让出执行
行初始语句 。Case 不支持自动 fall through, 支持多个判          权 , 等待读写事件的发生 。 一旦读写事件得到通知 , 网络                 互
断条件和表达式 。                                      模块内部通过 Channel 通知刚才被阻塞的操作继续执行 。
                                                                                               联
                                                                                               网
    轻量的类型系统 , 强类型 , 没有隐式的转换 , 显式               从用户使用角度来看 , 网络的读写都是顺序执行的 , 极大                   产
类型转化 。                                         地简化了编程 。                                        品
    指针运算由 slice 代替 , 提高安全性的同时也有很高                 正是 Network+ 闭包 +Goroutine+Channel 让 Go 语言    设
                                                                                               计
的效率 。                                          这么突出 , 突破了用户在编写大规模系统程序时的局限 。
    内置基本数据类型数组和字典 。                                                                           10
                                                                                               年
    type: 相当灵活的 struct, 支持匿名字段 , 复用看起          库实现
来很优雅 。                                             完全用 Go 语言实现 , 不依赖其他系统库 。
    灵活但独特的 interface: 接口类型 , 接口实现分                 模块管理 。 一个 Package 可以分散在多个文件里 ,
离 。 若一个 struct 实现了 interface 声明的方法则视为实现        通过包名整合在一起 。 支持包层面的初始化操作 。
此 interface。 通用类型 interface{} 用来表示同样类型 , 用         接口库如 XML、Asn1、JSON、IO 库 、 压缩 、 加密
于实现包容器和用于参数省略的场合 。                             库等 , 比较齐全 , 极大地方便了用户 。
    range:for语句支持通用的迭代,支持数组、字                      支持 Unicode。
典 、 通讯管道 。 特别是通讯管道结合 Goroutine, 由生产
者负责在一端输入数据 ,range 充当消费者 , 从另外一端                与其他语言的交互
消费数据 。                                            Cgo 支持 C 和 Go 语言编程混合 , 使得 Go 语言的扩展
    reflection: 用于实现多参数机制和实现比如 XML、            非常容易 , 让 Cgo 来做参数和类型转换 , 直接连接用户的
JSON 库 , 很直观地把结构的字段名和值映射起来 , 但是                C 函数 。
执行效率不高 。
    defer 负责资源的自动释放 , 有效地避免资源泄漏 。              目前存在的问题
                                                   语言的面世时间比较短 , 实现和社区都不够成熟 ,
语言亮点                                           一些关键的语言特性如 select timeout 还没有实现 , 编译
   闭包 : 函数是第一类对象 。 有了闭包 , 我们很容易把               器也不大完善 。
数据和函数结合在一起 , 形成一个独立的执行体 , 无需关                      语言库少 , 主要体现在缺少高级网络 、GUI、 数据
心数据的泄漏 , 是并发编程的基础 。                            库访和媒体处理库 。
   Channel:CSP 的核心思想是通过消息共享 , 而不                   基于 Go 的应用还比较少 , 甚至在 Google 内部也还
是内存共享 。 而消息共享机制就是通过 Channel 来传递消               是个试验项目 , 还没有大规模的应用 。

                                                                               2010 08   65

Contenu connexe

Tendances

GaoLei\'s Summer Intern Report.pdf
GaoLei\'s Summer Intern Report.pdfGaoLei\'s Summer Intern Report.pdf
GaoLei\'s Summer Intern Report.pdfLeon Gao(高磊)
 
COSCUP 2019 國際開放原始碼專案經營 - 從失敗中學習
COSCUP 2019 國際開放原始碼專案經營 - 從失敗中學習COSCUP 2019 國際開放原始碼專案經營 - 從失敗中學習
COSCUP 2019 國際開放原始碼專案經營 - 從失敗中學習Jen Yee Hong
 
Programming language basic
Programming language basicProgramming language basic
Programming language basiccri fan
 
FreeBSD 文件翻譯計劃
FreeBSD 文件翻譯計劃FreeBSD 文件翻譯計劃
FreeBSD 文件翻譯計劃Raycherng Yu
 
PIME - 用 Python 和 JavaScript 快速開發 Windows 的中文輸入法
PIME - 用 Python 和 JavaScript 快速開發 Windows 的中文輸入法PIME - 用 Python 和 JavaScript 快速開發 Windows 的中文輸入法
PIME - 用 Python 和 JavaScript 快速開發 Windows 的中文輸入法Jen Yee Hong
 
開放原始碼的回收與再利用
開放原始碼的回收與再利用開放原始碼的回收與再利用
開放原始碼的回收與再利用建興 王
 
深入PHP内核之路
深入PHP内核之路深入PHP内核之路
深入PHP内核之路Gump Law
 

Tendances (9)

GaoLei\'s Summer Intern Report.pdf
GaoLei\'s Summer Intern Report.pdfGaoLei\'s Summer Intern Report.pdf
GaoLei\'s Summer Intern Report.pdf
 
COSCUP 2019 國際開放原始碼專案經營 - 從失敗中學習
COSCUP 2019 國際開放原始碼專案經營 - 從失敗中學習COSCUP 2019 國際開放原始碼專案經營 - 從失敗中學習
COSCUP 2019 國際開放原始碼專案經營 - 從失敗中學習
 
Programming language basic
Programming language basicProgramming language basic
Programming language basic
 
FreeBSD 文件翻譯計劃
FreeBSD 文件翻譯計劃FreeBSD 文件翻譯計劃
FreeBSD 文件翻譯計劃
 
PIME - 用 Python 和 JavaScript 快速開發 Windows 的中文輸入法
PIME - 用 Python 和 JavaScript 快速開發 Windows 的中文輸入法PIME - 用 Python 和 JavaScript 快速開發 Windows 的中文輸入法
PIME - 用 Python 和 JavaScript 快速開發 Windows 的中文輸入法
 
Python 庫簡介
Python 庫簡介Python 庫簡介
Python 庫簡介
 
2016 年春季嵌入式作業系統課程說明
2016 年春季嵌入式作業系統課程說明2016 年春季嵌入式作業系統課程說明
2016 年春季嵌入式作業系統課程說明
 
開放原始碼的回收與再利用
開放原始碼的回收與再利用開放原始碼的回收與再利用
開放原始碼的回收與再利用
 
深入PHP内核之路
深入PHP内核之路深入PHP内核之路
深入PHP内核之路
 

En vedette

Erlang开发实践
Erlang开发实践Erlang开发实践
Erlang开发实践Feng Yu
 
Erlang分布式系统的的领域语言
Erlang分布式系统的的领域语言Erlang分布式系统的的领域语言
Erlang分布式系统的的领域语言Feng Yu
 
了解内存
了解内存了解内存
了解内存Feng Yu
 
低成本和高性能MySQL云架构探索
低成本和高性能MySQL云架构探索低成本和高性能MySQL云架构探索
低成本和高性能MySQL云架构探索Feng Yu
 
mnesia脑裂问题综述
mnesia脑裂问题综述mnesia脑裂问题综述
mnesia脑裂问题综述Feng Yu
 
Cpu高效编程技术
Cpu高效编程技术Cpu高效编程技术
Cpu高效编程技术Feng Yu
 
Systemtap
SystemtapSystemtap
SystemtapFeng Yu
 
了解网络
了解网络了解网络
了解网络Feng Yu
 

En vedette (8)

Erlang开发实践
Erlang开发实践Erlang开发实践
Erlang开发实践
 
Erlang分布式系统的的领域语言
Erlang分布式系统的的领域语言Erlang分布式系统的的领域语言
Erlang分布式系统的的领域语言
 
了解内存
了解内存了解内存
了解内存
 
低成本和高性能MySQL云架构探索
低成本和高性能MySQL云架构探索低成本和高性能MySQL云架构探索
低成本和高性能MySQL云架构探索
 
mnesia脑裂问题综述
mnesia脑裂问题综述mnesia脑裂问题综述
mnesia脑裂问题综述
 
Cpu高效编程技术
Cpu高效编程技术Cpu高效编程技术
Cpu高效编程技术
 
Systemtap
SystemtapSystemtap
Systemtap
 
了解网络
了解网络了解网络
了解网络
 

Similaire à Go

Recycle Open Source Projects
Recycle Open Source ProjectsRecycle Open Source Projects
Recycle Open Source ProjectsGeorge Ang
 
2006 recycle opensourceprojects
2006 recycle opensourceprojects2006 recycle opensourceprojects
2006 recycle opensourceprojectsGeorge Ang
 
Django敏捷开发 刘天斯
Django敏捷开发 刘天斯Django敏捷开发 刘天斯
Django敏捷开发 刘天斯liuts
 
51 cto下载 51cto信息图:openshift vs cloudfoundry
51 cto下载 51cto信息图:openshift vs cloudfoundry51 cto下载 51cto信息图:openshift vs cloudfoundry
51 cto下载 51cto信息图:openshift vs cloudfoundryHong Cai
 
Golangintro
GolangintroGolangintro
Golangintro理 傅
 
從 Java programmer 的觀點看 ruby
從 Java programmer 的觀點看 ruby從 Java programmer 的觀點看 ruby
從 Java programmer 的觀點看 ruby建興 王
 
Ruby on rails部署
Ruby on rails部署Ruby on rails部署
Ruby on rails部署Deng Peng
 
Big Java, Big Data
Big Java, Big DataBig Java, Big Data
Big Java, Big DataKuo-Chun Su
 
C/C++与Lua混合编程
C/C++与Lua混合编程C/C++与Lua混合编程
C/C++与Lua混合编程xlight
 
快手K-Engine高性能异构存储引擎演进之路. Kuaishou high performance storage engine. named K-En...
快手K-Engine高性能异构存储引擎演进之路. Kuaishou high performance storage engine. named K-En...快手K-Engine高性能异构存储引擎演进之路. Kuaishou high performance storage engine. named K-En...
快手K-Engine高性能异构存储引擎演进之路. Kuaishou high performance storage engine. named K-En...gugemichael
 
開放原始碼作為新事業: 台灣本土經驗談 (COSCUP 2011)
開放原始碼作為新事業: 台灣本土經驗談 (COSCUP 2011)開放原始碼作為新事業: 台灣本土經驗談 (COSCUP 2011)
開放原始碼作為新事業: 台灣本土經驗談 (COSCUP 2011)National Cheng Kung University
 
X-Plat Development
X-Plat DevelopmentX-Plat Development
X-Plat DevelopmentTekObserver
 
PHP WEB 应用组织与结构
PHP WEB 应用组织与结构PHP WEB 应用组织与结构
PHP WEB 应用组织与结构HonestQiao
 
DevOps Pipeline
DevOps PipelineDevOps Pipeline
DevOps PipelineJianhua Wu
 
Go 语言国际电子表格文档格式标准实践
Go 语言国际电子表格文档格式标准实践Go 语言国际电子表格文档格式标准实践
Go 语言国际电子表格文档格式标准实践Ri Xu
 
教學投影片01_Vb2005
教學投影片01_Vb2005教學投影片01_Vb2005
教學投影片01_Vb2005洋夫 葉
 
Ceph Day Beijing - Leverage Ceph for SDS in China Mobile
Ceph Day Beijing - Leverage Ceph for SDS in China MobileCeph Day Beijing - Leverage Ceph for SDS in China Mobile
Ceph Day Beijing - Leverage Ceph for SDS in China MobileCeph Community
 
Ceph Day Beijing - Leverage Ceph for SDS in China Mobile
Ceph Day Beijing - Leverage Ceph for SDS in China MobileCeph Day Beijing - Leverage Ceph for SDS in China Mobile
Ceph Day Beijing - Leverage Ceph for SDS in China MobileDanielle Womboldt
 

Similaire à Go (20)

Recycle Open Source Projects
Recycle Open Source ProjectsRecycle Open Source Projects
Recycle Open Source Projects
 
2006 recycle opensourceprojects
2006 recycle opensourceprojects2006 recycle opensourceprojects
2006 recycle opensourceprojects
 
Django敏捷开发 刘天斯
Django敏捷开发 刘天斯Django敏捷开发 刘天斯
Django敏捷开发 刘天斯
 
51 cto下载 51cto信息图:openshift vs cloudfoundry
51 cto下载 51cto信息图:openshift vs cloudfoundry51 cto下载 51cto信息图:openshift vs cloudfoundry
51 cto下载 51cto信息图:openshift vs cloudfoundry
 
Golangintro
GolangintroGolangintro
Golangintro
 
從 Java programmer 的觀點看 ruby
從 Java programmer 的觀點看 ruby從 Java programmer 的觀點看 ruby
從 Java programmer 的觀點看 ruby
 
Ruby on rails部署
Ruby on rails部署Ruby on rails部署
Ruby on rails部署
 
Big Java, Big Data
Big Java, Big DataBig Java, Big Data
Big Java, Big Data
 
C/C++与Lua混合编程
C/C++与Lua混合编程C/C++与Lua混合编程
C/C++与Lua混合编程
 
快手K-Engine高性能异构存储引擎演进之路. Kuaishou high performance storage engine. named K-En...
快手K-Engine高性能异构存储引擎演进之路. Kuaishou high performance storage engine. named K-En...快手K-Engine高性能异构存储引擎演进之路. Kuaishou high performance storage engine. named K-En...
快手K-Engine高性能异构存储引擎演进之路. Kuaishou high performance storage engine. named K-En...
 
開放原始碼作為新事業: 台灣本土經驗談 (COSCUP 2011)
開放原始碼作為新事業: 台灣本土經驗談 (COSCUP 2011)開放原始碼作為新事業: 台灣本土經驗談 (COSCUP 2011)
開放原始碼作為新事業: 台灣本土經驗談 (COSCUP 2011)
 
X-Plat Development
X-Plat DevelopmentX-Plat Development
X-Plat Development
 
PHP WEB 应用组织与结构
PHP WEB 应用组织与结构PHP WEB 应用组织与结构
PHP WEB 应用组织与结构
 
DevOps Pipeline
DevOps PipelineDevOps Pipeline
DevOps Pipeline
 
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
 
Go 语言国际电子表格文档格式标准实践
Go 语言国际电子表格文档格式标准实践Go 语言国际电子表格文档格式标准实践
Go 语言国际电子表格文档格式标准实践
 
教學投影片01_Vb2005
教學投影片01_Vb2005教學投影片01_Vb2005
教學投影片01_Vb2005
 
Ceph Day Beijing - Leverage Ceph for SDS in China Mobile
Ceph Day Beijing - Leverage Ceph for SDS in China MobileCeph Day Beijing - Leverage Ceph for SDS in China Mobile
Ceph Day Beijing - Leverage Ceph for SDS in China Mobile
 
Ceph Day Beijing - Leverage Ceph for SDS in China Mobile
Ceph Day Beijing - Leverage Ceph for SDS in China MobileCeph Day Beijing - Leverage Ceph for SDS in China Mobile
Ceph Day Beijing - Leverage Ceph for SDS in China Mobile
 
Ch01
Ch01Ch01
Ch01
 

Plus de Feng Yu

了解集群
了解集群了解集群
了解集群Feng Yu
 
了解应用服务器
了解应用服务器了解应用服务器
了解应用服务器Feng Yu
 
我为什么要选择RabbitMQ
我为什么要选择RabbitMQ我为什么要选择RabbitMQ
我为什么要选择RabbitMQFeng Yu
 
利用新硬件提升数据库性能
利用新硬件提升数据库性能利用新硬件提升数据库性能
利用新硬件提升数据库性能Feng Yu
 
MySQL和IO(上)
MySQL和IO(上)MySQL和IO(上)
MySQL和IO(上)Feng Yu
 
MySQL和IO(下)
MySQL和IO(下)MySQL和IO(下)
MySQL和IO(下)Feng Yu
 
了解Cpu
了解Cpu了解Cpu
了解CpuFeng Yu
 
了解IO协议栈
了解IO协议栈了解IO协议栈
了解IO协议栈Feng Yu
 
了解IO设备
了解IO设备了解IO设备
了解IO设备Feng Yu
 
Flash存储设备在淘宝的应用实践
Flash存储设备在淘宝的应用实践Flash存储设备在淘宝的应用实践
Flash存储设备在淘宝的应用实践Feng Yu
 
SSD在淘宝的应用实践
SSD在淘宝的应用实践SSD在淘宝的应用实践
SSD在淘宝的应用实践Feng Yu
 
Rethink db&tokudb调研测试报告
Rethink db&tokudb调研测试报告Rethink db&tokudb调研测试报告
Rethink db&tokudb调研测试报告Feng Yu
 
高性能集群服务器(Erlang解决方案)
高性能集群服务器(Erlang解决方案)高性能集群服务器(Erlang解决方案)
高性能集群服务器(Erlang解决方案)Feng Yu
 
淘宝商品库MySQL优化实践
淘宝商品库MySQL优化实践淘宝商品库MySQL优化实践
淘宝商品库MySQL优化实践Feng Yu
 
开源混合存储方案(Flashcache)
开源混合存储方案(Flashcache)开源混合存储方案(Flashcache)
开源混合存储方案(Flashcache)Feng Yu
 
Erlang low cost_clound_computing
Erlang low cost_clound_computingErlang low cost_clound_computing
Erlang low cost_clound_computingFeng Yu
 
Oprofile linux
Oprofile linuxOprofile linux
Oprofile linuxFeng Yu
 
C1000K高性能服务器构建技术
C1000K高性能服务器构建技术C1000K高性能服务器构建技术
C1000K高性能服务器构建技术Feng Yu
 
Erlang全接触
Erlang全接触Erlang全接触
Erlang全接触Feng Yu
 
Tsung 压力测试工具
Tsung 压力测试工具Tsung 压力测试工具
Tsung 压力测试工具Feng Yu
 

Plus de Feng Yu (20)

了解集群
了解集群了解集群
了解集群
 
了解应用服务器
了解应用服务器了解应用服务器
了解应用服务器
 
我为什么要选择RabbitMQ
我为什么要选择RabbitMQ我为什么要选择RabbitMQ
我为什么要选择RabbitMQ
 
利用新硬件提升数据库性能
利用新硬件提升数据库性能利用新硬件提升数据库性能
利用新硬件提升数据库性能
 
MySQL和IO(上)
MySQL和IO(上)MySQL和IO(上)
MySQL和IO(上)
 
MySQL和IO(下)
MySQL和IO(下)MySQL和IO(下)
MySQL和IO(下)
 
了解Cpu
了解Cpu了解Cpu
了解Cpu
 
了解IO协议栈
了解IO协议栈了解IO协议栈
了解IO协议栈
 
了解IO设备
了解IO设备了解IO设备
了解IO设备
 
Flash存储设备在淘宝的应用实践
Flash存储设备在淘宝的应用实践Flash存储设备在淘宝的应用实践
Flash存储设备在淘宝的应用实践
 
SSD在淘宝的应用实践
SSD在淘宝的应用实践SSD在淘宝的应用实践
SSD在淘宝的应用实践
 
Rethink db&tokudb调研测试报告
Rethink db&tokudb调研测试报告Rethink db&tokudb调研测试报告
Rethink db&tokudb调研测试报告
 
高性能集群服务器(Erlang解决方案)
高性能集群服务器(Erlang解决方案)高性能集群服务器(Erlang解决方案)
高性能集群服务器(Erlang解决方案)
 
淘宝商品库MySQL优化实践
淘宝商品库MySQL优化实践淘宝商品库MySQL优化实践
淘宝商品库MySQL优化实践
 
开源混合存储方案(Flashcache)
开源混合存储方案(Flashcache)开源混合存储方案(Flashcache)
开源混合存储方案(Flashcache)
 
Erlang low cost_clound_computing
Erlang low cost_clound_computingErlang low cost_clound_computing
Erlang low cost_clound_computing
 
Oprofile linux
Oprofile linuxOprofile linux
Oprofile linux
 
C1000K高性能服务器构建技术
C1000K高性能服务器构建技术C1000K高性能服务器构建技术
C1000K高性能服务器构建技术
 
Erlang全接触
Erlang全接触Erlang全接触
Erlang全接触
 
Tsung 压力测试工具
Tsung 压力测试工具Tsung 压力测试工具
Tsung 压力测试工具
 

Dernier

哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制
哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制
哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制jakepaige317
 
1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...
1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...
1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...黑客 接单【TG/微信qoqoqdqd】
 
educ6506presentationtc3302771-240427173057-06a46de5.pptx
educ6506presentationtc3302771-240427173057-06a46de5.pptxeduc6506presentationtc3302771-240427173057-06a46de5.pptx
educ6506presentationtc3302771-240427173057-06a46de5.pptxmekosin001123
 
泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书
泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书
泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书jakepaige317
 
EDUC6506_ClassPresentation_TC330277 (1).pptx
EDUC6506_ClassPresentation_TC330277 (1).pptxEDUC6506_ClassPresentation_TC330277 (1).pptx
EDUC6506_ClassPresentation_TC330277 (1).pptxmekosin001123
 
EDUC6506(001)_ClassPresentation_2_TC330277 (1).pptx
EDUC6506(001)_ClassPresentation_2_TC330277 (1).pptxEDUC6506(001)_ClassPresentation_2_TC330277 (1).pptx
EDUC6506(001)_ClassPresentation_2_TC330277 (1).pptxmekosin001123
 

Dernier (6)

哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制
哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制
哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制
 
1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...
1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...
1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...
 
educ6506presentationtc3302771-240427173057-06a46de5.pptx
educ6506presentationtc3302771-240427173057-06a46de5.pptxeduc6506presentationtc3302771-240427173057-06a46de5.pptx
educ6506presentationtc3302771-240427173057-06a46de5.pptx
 
泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书
泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书
泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书
 
EDUC6506_ClassPresentation_TC330277 (1).pptx
EDUC6506_ClassPresentation_TC330277 (1).pptxEDUC6506_ClassPresentation_TC330277 (1).pptx
EDUC6506_ClassPresentation_TC330277 (1).pptx
 
EDUC6506(001)_ClassPresentation_2_TC330277 (1).pptx
EDUC6506(001)_ClassPresentation_2_TC330277 (1).pptxEDUC6506(001)_ClassPresentation_2_TC330277 (1).pptx
EDUC6506(001)_ClassPresentation_2_TC330277 (1).pptx
 

Go

  • 1. 系统编程语言明日之星—Go ■ 文 / 余锋 G o 语言由Google 提供支持,于2007 年 了动态语 言的弹性 , 又有了静态语言的安全性 9 月开始浮出水面 , 出自 Rob Pike、 和高性能 。Rob Pike 指出 Go 代码的编译基本 Ken Thomason 等大师之手 , 是一种 上可以达到 C 语言的速度 , 几乎可以在瞬间完 支持并发和垃圾回收的编译型编程语言。 成 。 而在运行效率上已经和 C 语言很接近 , 同 Go 语言是基于 BSD 许可发行的开源项目 , 时支持多核心并发运算 。 来自语言性能比较网 目前只支持Linux、Mac OS X和Windows平台。 站 Computer Language Benchmarks Game 由于团队资源及社区规模的限制 , 目前 Go 还无 的数据也验证了这一点 。 目前这个 Go 社区非常 法支持更多的操作系统,因此需要更多的参与者 活跃 , 新的特性和包在不断地被提出和加入 , 来进行移植。 加上有 Google 在背后强力支持和推广 , 个人认 作者简介: Go 语言创建伊始 , 就目标明确 —— 创建一 为应用前景非常广阔 。 Cover Story 余锋,就职于淘宝核心系 种高性能 、 开发迅速 、 安全且富有趣味的系统 统研发部。多年C和网络 开发经验,专注于高性 编程语言 。 各种高性能的网络服务器 、 文件存 Go能解决什么问题呢? 能、容错、分布式服务器 储系统 、 数据库等 , 都非常适合使用 Go 进行开 我们在编写系统程序时总是会面临以下挑 的研究和实现。 发 。 当然 Go 也可以运用在其他领域 ,Go 的官 战 : 第一 , 硬件发展得很快 , 软件技术总是突 方网站 golang.org 就是使用 gdoc 实现的 。 破得很慢 ; 第二 , 复杂的系统依赖性很强 , 平 Go 已经在 Google 公司内部尝试使用 , 但 台 、 库 、 管理这些依赖相当麻烦 ; 第三 , 目前 封面报道 是并没有大规模地部署,因此仍处于试验阶 可用的系统语言如 C++、Java 太笨拙 , 也太复 段 , 需要丰富的测试和考验 。 杂 , 在处理复杂情况时感觉力不从心 ; 第四 , Go已经给了我们一个华丽的亮相,在工 复杂的内存管理和资源管理 ; 第五 , 多核心机 程层面,Go语言官方目前还没有自己的编辑 器的涌现 , 在未来几年里面 128 核心的机器应 器 , 但是发布包带了 Emacs、VI 以及 Xcode 该会很常见 , 我们难道还是用最原始的线程 机 的插件 , 方便用户的编辑 。 它目前有 2 个编译 制和同步原语来面对 ? 器 : 源于 Plan9 的 Native 8/6g 编译器和以 GCC 大部分系统语言并不是设计来解决这些问 为后端的 Gccgo。 Gccgo 能编译出来更高效的 题的,而且新涌现的大多数程序库也并没有 代码 , 还可以和其他的 gcc 库相链接 。 但是遗 改善这些问题 , 相反加剧了复杂度 。 正如 Rob 憾的是 Gccgo 尚未实现垃圾收集 ,Goroutine Pike 说 :“ 我们开发 Go, 是因为近 10 年来开 通过 pthread 实现 , 调度开销大且栈空间占用 发系统程序之难让我们有点沮丧 。 这时候 Go 多 , 而且编译时间较长 , 无法在实际项目中使 来拯救我们啦 !” 用 。 排错器和调优器目前还不大可用 。 我看好 Go 的原因是 , 这个语言不是凭空或 设计目标 者实验室设计的 , 而是填补过去 10 年在系统编 系统编程语言 程软件方面的不足 。 作为系统软件的编写者 , 快速编译和执行 经常会深深地感到目前常见系统语言在面对大 类型安全性和内存使用安全 规模网络应用的力不从心 , 在不断涌现的多核 很好的支持并发计算 心硬件前的无奈 , 在多线程和各种锁中间的痛 高效低延迟的垃圾回收算法 苦 , 在不停地制造各种各样的轮子的困惑 , 以 及在使用很原始的排错器的低效 。Go 拥有的这 设计原则 些现代特性都是系统用户梦寐以求的 , 既结合 更少的关键词 , 减少无谓的输入 64 程序员
  • 2. 保持概念正交 息 , 有同步和异步之分 。Channel 在生产者和消费者之间 保持简单 架设起沟通的桥梁 , 承担起传统语言消息队列的作用 。 减少类型 , 无类型层次 , 避免罗嗦 Goroutine:Goroutine 是使并发编程变得容易的核 心 。 实现上是通过系统的线程来多路派遣协程 , 使得函数 语言特性 的执行看起来独立 。 当一个协程阻塞的时候 , 比如说费时 G o 语 言 脱胎 于 C 语 言 , 同 时 还 从社 区 的 其 他语 言如 的系统调用 , 调度器就会自动把其他协程安排到另外的线 Pascal、 CSP、Occam 借鉴了很多特性 , 添加了如包管 程去执行 , 从而保证了系统的不间断运行 。 这个调度对于 理、反射、 垃圾回收器、动态类型、并发以及并行机制等。 程序员是透明的 , 从用户的角度来看 , 协程在一直运行 。 它有一些有趣的特性 : 而且这个调度的开销非常小 , 典型的 CPU 每秒钟可以调度 融合多种语言的特性 , 各个社区的人都感觉会很熟 百万次 , 协程还支持堆栈的自增 。 这两个设计使得我们可 悉 , 特别是 C、Lua、Python 社区的用户非常容易上手 。 以创建大量的 goroutine, 模拟现实世界对象的行为 , 大 支持面向对象编程 , 但是不支持层次继承 。 大简化了程序的设计和实现 。 清晰 、 精确的语法 。 Network 支持 : 目前支持 Tcp/Udp 协议 , 有统一的编 大写符号导出公共符号 , 小写是私有的 。 程接口 , 方便未来支持更多的协议 , 通过内核 POLL 支持 函数或者块开始注释是文档 , 方便 gdoc 生成文档 。 成千上万的并发连接 。 在网络读写暂时无效的时候 , 网络 改进的 If、Case 复合语句 , 允许在条件判定前 , 执 模块会自动把该句柄注册到系统的 poll set, 并且让出执行 行初始语句 。Case 不支持自动 fall through, 支持多个判 权 , 等待读写事件的发生 。 一旦读写事件得到通知 , 网络 互 断条件和表达式 。 模块内部通过 Channel 通知刚才被阻塞的操作继续执行 。 联 网 轻量的类型系统 , 强类型 , 没有隐式的转换 , 显式 从用户使用角度来看 , 网络的读写都是顺序执行的 , 极大 产 类型转化 。 地简化了编程 。 品 指针运算由 slice 代替 , 提高安全性的同时也有很高 正是 Network+ 闭包 +Goroutine+Channel 让 Go 语言 设 计 的效率 。 这么突出 , 突破了用户在编写大规模系统程序时的局限 。 内置基本数据类型数组和字典 。 10 年 type: 相当灵活的 struct, 支持匿名字段 , 复用看起 库实现 来很优雅 。 完全用 Go 语言实现 , 不依赖其他系统库 。 灵活但独特的 interface: 接口类型 , 接口实现分 模块管理 。 一个 Package 可以分散在多个文件里 , 离 。 若一个 struct 实现了 interface 声明的方法则视为实现 通过包名整合在一起 。 支持包层面的初始化操作 。 此 interface。 通用类型 interface{} 用来表示同样类型 , 用 接口库如 XML、Asn1、JSON、IO 库 、 压缩 、 加密 于实现包容器和用于参数省略的场合 。 库等 , 比较齐全 , 极大地方便了用户 。 range:for语句支持通用的迭代,支持数组、字 支持 Unicode。 典 、 通讯管道 。 特别是通讯管道结合 Goroutine, 由生产 者负责在一端输入数据 ,range 充当消费者 , 从另外一端 与其他语言的交互 消费数据 。 Cgo 支持 C 和 Go 语言编程混合 , 使得 Go 语言的扩展 reflection: 用于实现多参数机制和实现比如 XML、 非常容易 , 让 Cgo 来做参数和类型转换 , 直接连接用户的 JSON 库 , 很直观地把结构的字段名和值映射起来 , 但是 C 函数 。 执行效率不高 。 defer 负责资源的自动释放 , 有效地避免资源泄漏 。 目前存在的问题 语言的面世时间比较短 , 实现和社区都不够成熟 , 语言亮点 一些关键的语言特性如 select timeout 还没有实现 , 编译 闭包 : 函数是第一类对象 。 有了闭包 , 我们很容易把 器也不大完善 。 数据和函数结合在一起 , 形成一个独立的执行体 , 无需关 语言库少 , 主要体现在缺少高级网络 、GUI、 数据 心数据的泄漏 , 是并发编程的基础 。 库访和媒体处理库 。 Channel:CSP 的核心思想是通过消息共享 , 而不 基于 Go 的应用还比较少 , 甚至在 Google 内部也还 是内存共享 。 而消息共享机制就是通过 Channel 来传递消 是个试验项目 , 还没有大规模的应用 。 2010 08 65