关于 Go 语言的思考
-
Upload
parvani-gautam -
Category
Documents
-
view
95 -
download
6
description
Transcript of 关于 Go 语言的思考
![Page 1: 关于 Go 语言的思考](https://reader033.fdocuments.net/reader033/viewer/2022061500/56812dab550346895d92d24d/html5/thumbnails/1.jpg)
关于 Go 语言的思考
韦光京2011-10-29
![Page 2: 关于 Go 语言的思考](https://reader033.fdocuments.net/reader033/viewer/2022061500/56812dab550346895d92d24d/html5/thumbnails/2.jpg)
概要• 为什么喜欢 Go 语言• Go 语言的面向对象• Go 语言的动态 特性• Go 语言的并发特性• Go 语言的未来: Go 1• 特别的: Go 语言的 windows 移植
![Page 3: 关于 Go 语言的思考](https://reader033.fdocuments.net/reader033/viewer/2022061500/56812dab550346895d92d24d/html5/thumbnails/3.jpg)
为什么喜欢 Go 语言• 向 Unix 致敬
– Ken Thompson– Rob Pike
• C + Python ,动静相宜
![Page 4: 关于 Go 语言的思考](https://reader033.fdocuments.net/reader033/viewer/2022061500/56812dab550346895d92d24d/html5/thumbnails/4.jpg)
为什么喜欢 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 语言的思考](https://reader033.fdocuments.net/reader033/viewer/2022061500/56812dab550346895d92d24d/html5/thumbnails/5.jpg)
为什么喜欢 Go 语言• Open source
– Bossie 2010 “best open source application development software.” 奖
– Codereview 机制• Just for fun
![Page 6: 关于 Go 语言的思考](https://reader033.fdocuments.net/reader033/viewer/2022061500/56812dab550346895d92d24d/html5/thumbnails/6.jpg)
一些特别的地方• 减少打字,自动类型推导/* 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 语言的思考](https://reader033.fdocuments.net/reader033/viewer/2022061500/56812dab550346895d92d24d/html5/thumbnails/7.jpg)
• 非常实用的工具– Gofmt 格式化代码– Gofix 自动更新代码– Godoc 从 Go 代码中生成文档– Gotest 测试框架– Goinstall 下载并编译安装库
![Page 8: 关于 Go 语言的思考](https://reader033.fdocuments.net/reader033/viewer/2022061500/56812dab550346895d92d24d/html5/thumbnails/8.jpg)
• 跨平台,交叉编译– GOOS , GOARCH 环境变量– Linux , Windows , Mac , BSD , Plan 9– X86 , AMD64 , ARM
![Page 9: 关于 Go 语言的思考](https://reader033.fdocuments.net/reader033/viewer/2022061500/56812dab550346895d92d24d/html5/thumbnails/9.jpg)
• Google App Engine 支持– 目前是 Experimental状态– Go 1 将会正式支持
![Page 10: 关于 Go 语言的思考](https://reader033.fdocuments.net/reader033/viewer/2022061500/56812dab550346895d92d24d/html5/thumbnails/10.jpg)
没有类的面向对象机制• 任何类型都可以有方法,任何类型都可以
是对象• Interface 强制数据和代码分离(抽象类)• 继承通过嵌入来实现( Mix-in )• 冲突的简单处理
![Page 11: 关于 Go 语言的思考](https://reader033.fdocuments.net/reader033/viewer/2022061500/56812dab550346895d92d24d/html5/thumbnails/11.jpg)
例子type 动物 struct {
生命值 int}func ( 动物 ) 叫 () string { return "" }type 猫 struct {
动物}func ( 猫 ) 叫 () string { return " 喵喵 " }
![Page 12: 关于 Go 语言的思考](https://reader033.fdocuments.net/reader033/viewer/2022061500/56812dab550346895d92d24d/html5/thumbnails/12.jpg)
动态特性• Duck typing
– Interface 定义方法集合– 任何类型实现了这些方法就实现了这个
interface
![Page 13: 关于 Go 语言的思考](https://reader033.fdocuments.net/reader033/viewer/2022061500/56812dab550346895d92d24d/html5/thumbnails/13.jpg)
• 反射– Interface {}– TypeOf– ValueOf– SetXXX
![Page 14: 关于 Go 语言的思考](https://reader033.fdocuments.net/reader033/viewer/2022061500/56812dab550346895d92d24d/html5/thumbnails/14.jpg)
并发• 语法级支持
– Goroutines– Channeltimeout := make(chan bool, 1)go func() {
time.Sleep(1e9) // one secondtimeout <- true
}()
![Page 15: 关于 Go 语言的思考](https://reader033.fdocuments.net/reader033/viewer/2022061500/56812dab550346895d92d24d/html5/thumbnails/15.jpg)
并发• Channel is First class
– Channel 传递的消息可以是 channel
• 用同步的方式来简化并发编程• Communicating Sequential Processes (CSP)
![Page 16: 关于 Go 语言的思考](https://reader033.fdocuments.net/reader033/viewer/2022061500/56812dab550346895d92d24d/html5/thumbnails/16.jpg)
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 语言的思考](https://reader033.fdocuments.net/reader033/viewer/2022061500/56812dab550346895d92d24d/html5/thumbnails/17.jpg)
Go 的未来• Go 1
– 计划在 2012 年初发布– Go 语言将迎来第一个稳定版本!
![Page 18: 关于 Go 语言的思考](https://reader033.fdocuments.net/reader033/viewer/2022061500/56812dab550346895d92d24d/html5/thumbnails/18.jpg)
特别的: Go 语言的 Windows 移植
• 32 位( X86 )、 64 位( AMD64 )都已经完成• 完整移植
– 编译器– runtime– pkg– Cgo– Gdb 调试
• 我们是英雄!– Alex Brainman, Hector Chu, Joe Poirier, 我… .
![Page 19: 关于 Go 语言的思考](https://reader033.fdocuments.net/reader033/viewer/2022061500/56812dab550346895d92d24d/html5/thumbnails/19.jpg)
Windows 的一些特性• 链接 PE object 文件
– 动态、静态链接• 嵌入资源文件
– 可爱的图标• 生成 gui 界面程序
– 控制台和 GUI 程序
![Page 20: 关于 Go 语言的思考](https://reader033.fdocuments.net/reader033/viewer/2022061500/56812dab550346895d92d24d/html5/thumbnails/20.jpg)
我的未来的一些计划
• 支持生成动态库 • Gccgo 的 windows 移植?
![Page 21: 关于 Go 语言的思考](https://reader033.fdocuments.net/reader033/viewer/2022061500/56812dab550346895d92d24d/html5/thumbnails/21.jpg)
个人建议• 投入 Go 语言的怀抱吧,重拾编程的乐趣!