如此强大的 Go 语言

如此强大的 Go 语言

Go,在2009年全部开源出来后,它获得了当年的年度语言,但是直到2011年它才发布正式的稳定版本。Go稳定版发布时,Go Team承诺后续的版本都会兼容之前的版本。这对于开发者来说简直太重要了,Go后续的版本也一直在提升内功,从而可以让开发者们无缝的升级Go版本。16年再次荣获年度语言,势头迅猛,成为热门开发语言。昨晚九点的公开课--Go 语言分享,干货满满,互动火爆,我们来回顾下精彩内容。

什么是Go?

Go语言是Google于2009年推出的一门新的系统编程语言。

特点:

  • 静态编译
  • 垃圾回收
  • 简洁的符号和语法
  • 平坦的类型系统
  • 基于CSP的并发模型。
  • 高效简单的工具链
  • 丰富的标准库

历史

  • 2007年开始设计
  • 2008年作为Goole的20%项目开始实现
  • 2009年作为开源项目面向大众
  • 最新的是1.8版本

出身名贵的Go

了解一下Go的作者和主要核心开发者们,图中是Go的三个作者从左到右分别是:Robert Griesemer, Rob Pike 和 Ken Thompson。Robert在开发Go之前是Google V8、Chubby和HotSpot JVM的主要贡献者;Rob主要是Unix、UTF-8、plan9的作者;Ken主要是B语言、C语言的作者、Unix之父。

发展势头迅猛

两次荣获年度语言之星

排名增长迅猛

Hello World 示例

精短的高效能服务器

为什么需要一个新语言

  • 编写-编译-运行的链条花费太长时间
  • 语言太唠叨
  • 手残的灾难

趋势

  • 人力成本越来越高
  • 机器越来越便宜
  • 机器的性能越来越厉害
  • 在开发效率和运行速度上达到平衡

简化这门语言必是一门更大的成就 - Rob Pike

Go的思维方式

  • 最小心智负担原则
  • 最小特性
  • 最少惊异
  • 最少犯错机会

Go, Next Java? No, Next C!

  • 少就是指数级的多
  • 最少特性原则:如果一个功能不对解决任何问题有显著价值,那么就不提供
  • 显式表达:所写即所得的语言
  • 极度简化但完备的OOP
  • 功能内聚:例如,强大的组合能力
  • 最友善的 C 语言的支持

以软件工程为目的的语言设计

  • 快速编译
  • 严格的依赖管理
  • 代码风格的强一致性
  • 偏向组合而不是继承

几个优秀的设计

  • if for switch之类的语句不需要用括号了,但保留了大括号,方便定位语句块。
  • 可以使用 := 进行自动类型推导。再也不用写诸如 list<int>::iterator it = l.begin()之类的语法了。
  • 使用字母大小写设置可见性(letter case sets visibility)。省去了成员前面一堆的public和private,直接看名字就可以辨认。
  • 保留了指针操作,但去掉了指针算术,指针更安全了,同时留给了程序员使用值语义和引用语义的权利。
  • defer关键字。妈妈再也不用担心句柄没有关闭了。

对OOP的支持

  • 返璞归真,没有继承,只有组合
  • 明确区分复用和抽象,复用使用组合,抽象使用
  • 所见即所得,明确的内存模型,没有vtable之类的东西
  • 鸭子类型,抽象更方便

OOP的例子

Go的内置并发

并发的一个例子---斐波那契数列产生器

首先是Python版本:

python-fib

接下来是Go 版本:

go-fib



Go 解决C10K 问题


Go在工程上的设计

静态编译

  • 没有依赖地狱, 甚至是glibc
  • 编译一次,随处拷贝,部署极为方便
  • 对比 gitlab和gogs

gitlab.com/gitlab-org/g (gitlab.com/gitlab-org/g)

丰富的工具

  • 一键编译 go build

go build code.corp.elong.com/aos

  • 一键测试 go test

go test code.corp.elong.com/aos

  • 一键下载更新依赖并编译 go get

go get github.com/icexin/markd

  • 自动文档工具 godoc

简单介绍:Go和Python

Go跟Python相似的地方:

语法简单
功能强大
易于学习

不一样的地方:

运行速度快
并发支持
静态类型

Go的应用

Go在公司内部的使用:

  • 2013年开始在基础架构部试用
  • 2014年日志客户端使用go重写,收敛linux和windows的agent
  • 2015年监控后端几乎全部使用Go重写,策略模块每秒处理3w+的监控数据

Go的明星项目举例:

  • Docker,正火热的容器化技术
  • kubernetes,Goole Borg的开源实现
  • Etcd, 类似zookeeper的高可用key-value存储
  • TIDB, 国人开发的Google spanner的开源实现

Go学习资料

官方网站
golang.org (golang.org)

文档
golang.org/doc/ (golang.org/doc/)

Go学习途径
51reboot.com/course/go/

发布于 2018-01-12