他们带来 golang
golang 作为一门相对年轻的语言,是在 2009 年由 Ken Thompson 和 Robert Griesemer 共同在 Google 内部孵化出来的。golang 在许多方面都是可以看到 c 和 c++ 的影子。
Robert Griesemer,参与开发 Java HotSpot 虚拟机,Rob Pike,Go 语言项目总负责人,贝尔实验室 Unix 团队成员,参与的项目包括 Plan 9,Inferno 操作系统和 Limbo 编程语言,每次开发者大会都是他抛头露面,给我的印象是穿一件花衬衫。Ken Thompson,贝尔实验室 Unix 团队成员,C 语言、Unix 和 Plan 9 的创始人之一,与 Rob Pike 共同开发了 UTF-8 字符集规范
golang 的特点
其实 golang 有许多特点,但是对于我个人来说对 golang 第一个感觉就是模糊静态语言和动态语言的边界。执行起来有静态语言效率,写起来有动态语言的快捷感。
- 编译为机器码,不依赖其他库,glibc的版本有一定要求,部署就是扔一个文件上去就完成了
- 内置runtime,支持垃圾回收,这属于动态语言的特性之一吧,虽然目前来说GC不算完美,但是足以应付我们所能遇到的大多数情况,特别是Go1.1之后的GC
- 协程(goroutine),go 语言在处理线程同步和并发上下了很多功夫,为此设计出来 goroutine 和 channel。这些特点让我们可以看出 golang 是一门服务端的语言。除此外 go 语言还适合写一些脚本
- 用于线程同步的通道(channels)
- 静态类型语言,但是有动态语言的感觉
- 在 go 语言中没有面向对象思想也没有类的概念。go 语言依据 interface 的结构为 ad-hoc(点对点)关系
快速体验
Hello World
import "fmt"
func main() {
fmt.Println("hello world")
}
变量声明
var foo string;
foo = "hello" //ok
foo = 5 // 编译错误
与 JavaScript 语言差不多,通过 var 关键字定义变量。然后 foo 类型定义为 string。作为一门静态语言,必须为变量声明类型。
var foo = "hello" //
foo = 5 // 编译错误
如果声明变量时,没有特殊指定类型,go 会根据变量的赋值类型来确定变量 foo 的类型,所以随后再为 foo 赋值为 5,就会报出类型错误。
foo := "hello" // 隐式声明
foo = 5 // 编译错误