关于 Go 语言的思考

22
关关 Go 关关关关关 关关关 2011-10-29

description

关于 Go 语言的思考. 韦光京 2011-10-29. 概要. 为什么喜欢 Go 语言 Go 语言的面向对象 Go 语言的动态 特性 Go 语言的并发特性 Go 语言的未来: Go 1 特别的: Go 语言的 windows 移植. 为什么喜欢 Go 语言. 向 Unix 致敬 Ken Thompson Rob Pike C + Python ,动静相宜. 为什么喜欢 Go 语言. 语法很特别,可读性强 从左往右读,写起来也很方便 X int func main(argc int, argv *[]byte) int - PowerPoint PPT Presentation

Transcript of 关于 Go 语言的思考

Page 1: 关于 Go 语言的思考

关于 Go 语言的思考

韦光京2011-10-29

Page 2: 关于 Go 语言的思考

概要• 为什么喜欢 Go 语言• Go 语言的面向对象• Go 语言的动态 特性• Go 语言的并发特性• Go 语言的未来: Go 1• 特别的: Go 语言的 windows 移植

Page 3: 关于 Go 语言的思考

为什么喜欢 Go 语言• 向 Unix 致敬

– Ken Thompson– Rob Pike

• C + Python ,动静相宜

Page 4: 关于 Go 语言的思考

为什么喜欢 Go 语言• 语法很特别,可读性强

– 从左往右读,写起来也很方便X intfunc main(argc int, argv *[]byte) intf func(func(int,int) int, int) intf func(func(int,int) int, int) func(int, int) intsum := func(a, b int) int { return a+b } (3, 4)

Page 5: 关于 Go 语言的思考

为什么喜欢 Go 语言• Open source

– Bossie 2010 “best open source application development software.” 奖

– Codereview 机制• Just for fun

Page 6: 关于 Go 语言的思考

一些特别的地方• 减少打字,自动类型推导/* Define and use a type, T. */type T struct { a, b int }var t0 *T = new(T)t1 := new(T) // type taken from expr

Page 7: 关于 Go 语言的思考

• 非常实用的工具– Gofmt 格式化代码– Gofix 自动更新代码– Godoc 从 Go 代码中生成文档– Gotest 测试框架– Goinstall 下载并编译安装库

Page 8: 关于 Go 语言的思考

• 跨平台,交叉编译– GOOS , GOARCH 环境变量– Linux , Windows , Mac , BSD , Plan 9– X86 , AMD64 , ARM

Page 9: 关于 Go 语言的思考

• Google App Engine 支持– 目前是 Experimental状态– Go 1 将会正式支持

Page 10: 关于 Go 语言的思考

没有类的面向对象机制• 任何类型都可以有方法,任何类型都可以

是对象• Interface 强制数据和代码分离(抽象类)• 继承通过嵌入来实现( Mix-in )• 冲突的简单处理

Page 11: 关于 Go 语言的思考

例子type 动物 struct {

生命值 int}func ( 动物 ) 叫 () string { return "" }type 猫 struct {

动物}func ( 猫 ) 叫 () string { return " 喵喵 " }

Page 12: 关于 Go 语言的思考

动态特性• Duck typing

– Interface 定义方法集合– 任何类型实现了这些方法就实现了这个

interface

Page 13: 关于 Go 语言的思考

• 反射– Interface {}– TypeOf– ValueOf– SetXXX

Page 14: 关于 Go 语言的思考

并发• 语法级支持

– Goroutines– Channeltimeout := make(chan bool, 1)go func() {

time.Sleep(1e9) // one secondtimeout <- true

}()

Page 15: 关于 Go 语言的思考

并发• Channel is First class

– Channel 传递的消息可以是 channel

• 用同步的方式来简化并发编程• Communicating Sequential Processes (CSP)

Page 16: 关于 Go 语言的思考

A card reassembly example in Go

func copy(west, east chan byte) { for { east <- <-west } }func assemble(X chan byte, printer chan []byte) { lineimage := make([]byte, 125)

for i := 0;; {lineimage[i] = <-Xif i < 124 { i++ } else { printer <- lineimage; i = 0 }

}}func disassemble(cardfile chan []byte, X chan byte) {

for {cardimage := <-cardfilei := 0for i < len(cardimage) { X <- cardimage[i]; i++ }for i < 80 { X <- ' '; i++ }

}}go disassemble(cardreader, chars1)go copy(chars1, chars2)go assemble(chars2, lineprinter)

Page 17: 关于 Go 语言的思考

Go 的未来• Go 1

– 计划在 2012 年初发布– Go 语言将迎来第一个稳定版本!

Page 18: 关于 Go 语言的思考

特别的: Go 语言的 Windows 移植

• 32 位( X86 )、 64 位( AMD64 )都已经完成• 完整移植

– 编译器– runtime– pkg– Cgo– Gdb 调试

• 我们是英雄!– Alex Brainman, Hector Chu, Joe Poirier, 我… .

Page 19: 关于 Go 语言的思考

Windows 的一些特性• 链接 PE object 文件

– 动态、静态链接• 嵌入资源文件

– 可爱的图标• 生成 gui 界面程序

– 控制台和 GUI 程序

Page 20: 关于 Go 语言的思考

我的未来的一些计划

• 支持生成动态库 • Gccgo 的 windows 移植?

Page 21: 关于 Go 语言的思考

个人建议• 投入 Go 语言的怀抱吧,重拾编程的乐趣!