SlideShare ist ein Scribd-Unternehmen logo
1 von 25
淘宝技术部-互动社区
龙犽
我对Go语言一点理解
Go语言的背景介绍
• Go语言和谷歌
– Go语言诞生在谷歌
– Go语言是谷歌2007开始开发
– 2009年正式发布成为谷歌的第二个开源编程语言
– Go是谷歌著名的20%时间创造出来的新语言
– 谷歌的AppEngine很早就支持了Go语言的应用
– Go命令,Go关键字
– Go是为解决实际问题而创造的
什么是Go?
• Go是一门 并发支持、垃圾回收 的编译
型系统编程语言,旨在创造一门具有在静态编译
语言的 高性能和动态语言的 高效开
发 之间拥有良好平衡点的一门编程语言。
Go的发展
云计算的编程语言
Facebook的Hack
松本行泓的《代码的未来》
• New(新的)
– 开发效率更高的系统编程语言
• Experimental(实验性的)
– 被业界接受,需要时间
• Concurrent(并发的)
– 语言层面的并发支持
• Garbage-collected(带垃圾回收的)
• System(系统)
• Language
Go语言的特点
• 效率
– 可以媲美C或C++代码的速度
• 简洁
– 语法简洁,关键词大大减少
– 约定胜于配置
• 安全
– 类型安全和内存安全
• 性能
– 协程(goroutine)
– 为多核计算机的性能提升方案
GO语言的HELLO WORLD
Demo
GO和JAVA,我的一点看法
进入主题:
Go语法足够简洁(1)
• 关键字精简(25个)
– break,default,func,interface,select,case,defer,go,map,
– struct,chan,else,goto,package,switch,const,fallthrough,if,
– range,type,continue,for,import,return,var
• Java里还有哪些?
– public,private,protected (Go语言的约定①)
– while,static,final,try,catch,abstract,assert,class,do,enum,extends
,implements,finally,super,this,synaronized,volatile等
Go语法足够简洁(2)
• 可有可无的分号
– 在go语言中,语句结束的分号不在是强制需要的
• 变量声明:
– var Id int; Id = 1
– var Id int = 1
– Id := 1 (相当简洁吧?)
– 还有var () 代码块方式的声明
– 变量的可见性
– i , j = j ,i 能编译吗?
Go语法足够简洁(3)
• 常量和枚举类型
– 常量的可见性
– 没有声明则会默认采用前面的值
– 神奇的iota
• 条件表达式
– if语句的条件的括号也不需要了
– switch默认只会执行一个代码块,如果需要继续执行,需要
显示声明fallthrough
Go语法足够简洁(4)
• 一个for = Java语言的for,while,do
– for x<3 { }
– for { if XXXXX { break }}
– for i:=0; i<10;i++ {}
• 多函数值返回
– func numDiv(a int, b int) (int, error)
– Java里如何做呢?
• Go支持匿名函数和闭包
Go语法足够简洁(5)
• for…range
– 轻松实现对数组,切片,map和chan的数据的迭代
– 集合方法多返回值的特点,可以用来判断轮询的成功
或失败
数组和切片
• Go的数组和Java数组是相似的
– 不同长度的数组不能比较: int[2], int[3]
• 什么是切片
– 切片的长度len()
– 切片的容量cap()
– 切片的底层是数组
– 不同的slice可以指向同一个数组
指针,值传递,引用传递
• 指针
– .操作,没有-> 操作符
– &和*
• go方法入参默认是值传递
– 方法内获得的数据是入参的一个拷贝
– 所以任何对这个拷贝的修改不会影响到函数调用处的原始值
– 如果不希望修改入参,使用值传递
– 引用传递效率更高
– slice,map,chan默认是引用传递
Go的错误处理
• 不用try,catch代码块
• error接口,多函数值的返回
• defer的使用 (Java7中类似的语法改进)
– 按声明的先后的反顺序执行
– 即使有严重错误也会执行
• panic和recover
– panic可以在任何地方声明,recover则必须在defer代码快中处理
– 通常情况下,只需要使用error接口来处理错误
Go如何快捷的实现并发?
• Go的协程
• 语言层次上对并发的支持,轻轻松松可以实现单CPU上万的协
程
• go关键字
• 通过通信来共享内存
– chan
– 也支持共享内存的方式: sync包
• chan基础
– 类型相关的
– 双向,单向和带缓存的通道
Go如何快捷的实现并发?
• select和switch
– 他们只是语法上看着相似
– select只能使用在chan上
– 带default语句块的区别?
Go如何面向对象?
• Go没有对象,没有class关键字
• 用结构struct来实现类似对象的封装
• 不支持继承
– 只支持组合,没有Java那样复杂的类关系图
• 实现接口不用显示声明
– 只需要结构B实现了接口C的所有方法
• 空接口interface{}
– 相当于Java的万物之源Object
• 任何类型都可以增加方法
Go的命令行工具
• 只有一个go
– 跨平台的编译支持(6g,8g,5g,6l,8l,5l)
– 格式化代码 go fmt
– 编译,运行 go run, go build, go install
– 测试 go test
– 文档 go doc
– 远程包和库 go get
• 支持Git(Github)和Mercurial (Google Code)
其他(1)
• 对无效引用的强制性检查
– 没有使用的包引入
– 没有使用的变量声明
• 类型安全
– 强制类型安全检查
– 强制的类型转换
– 类型不同的数据不能比较
• make和new
– 智能通过make来创建slice, map和chan
– new返回的是一个指针
其他(2)
• ++和--
– 是语句,不是表达式
• Go语言的反射和类型断言
– reflect 包
• Go语言已经提供了对压缩,加密解密,图形图像,
国际化,网络,I/O,编码等完整的支持
总结
• Go是一门刚开始发展的语言,Java却已经足够的成熟,
庞大的开源类库
• Go是为了高并发而设计的,支持服务器端应用的开发,
目前是没有UI开发的包支持
• 语法上Go和Java,C++有很多的相似,所以学习的成
本很低
• Go是系统语言,不需要虚拟机,她对C和C++的改进
参考资料
• 网站:
– Go语言官方网站(http://golang.org)
– 网易云课堂中的Go语言课程
– http://play.golang.org
• 书籍:
• 开源项目
谢谢

Weitere ähnliche Inhalte

Ähnlich wie 我对Go语言一点理解

I os与android多平台开发心得
I os与android多平台开发心得I os与android多平台开发心得
I os与android多平台开发心得
drewz lin
 
開放原始碼 Ch1.3 intro - oss - google codes (ver 2.0)
開放原始碼 Ch1.3   intro - oss - google codes (ver 2.0)開放原始碼 Ch1.3   intro - oss - google codes (ver 2.0)
開放原始碼 Ch1.3 intro - oss - google codes (ver 2.0)
My own sweet home!
 
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第三天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第三天Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第三天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第三天
Gelis Wu
 
HTML5 生态系统和应用架构模型
HTML5 生态系统和应用架构模型HTML5 生态系统和应用架构模型
HTML5 生态系统和应用架构模型
Tom Fan
 

Ähnlich wie 我对Go语言一点理解 (10)

從 Java programmer 的觀點看 ruby
從 Java programmer 的觀點看 ruby從 Java programmer 的觀點看 ruby
從 Java programmer 的觀點看 ruby
 
Hybrid app简要介绍
Hybrid app简要介绍Hybrid app简要介绍
Hybrid app简要介绍
 
I os与android多平台开发心得
I os与android多平台开发心得I os与android多平台开发心得
I os与android多平台开发心得
 
開放原始碼 Ch1.3 intro - oss - google codes (ver 2.0)
開放原始碼 Ch1.3   intro - oss - google codes (ver 2.0)開放原始碼 Ch1.3   intro - oss - google codes (ver 2.0)
開放原始碼 Ch1.3 intro - oss - google codes (ver 2.0)
 
用 Kotlin Multiplatform 創建跨平台的 Android DeepLink 測試工具:Compose Desktop 實踐分享
用 Kotlin Multiplatform 創建跨平台的 Android DeepLink 測試工具:Compose Desktop 實踐分享用 Kotlin Multiplatform 創建跨平台的 Android DeepLink 測試工具:Compose Desktop 實踐分享
用 Kotlin Multiplatform 創建跨平台的 Android DeepLink 測試工具:Compose Desktop 實踐分享
 
React-Native share
React-Native shareReact-Native share
React-Native share
 
三十分鐘內,不用寫程式,教你打造具自然語言能力的聊天機器人
三十分鐘內,不用寫程式,教你打造具自然語言能力的聊天機器人三十分鐘內,不用寫程式,教你打造具自然語言能力的聊天機器人
三十分鐘內,不用寫程式,教你打造具自然語言能力的聊天機器人
 
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第三天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第三天Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第三天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第三天
 
Building Chatbot With Huggging Face
 				Building Chatbot With Huggging Face 				Building Chatbot With Huggging Face
Building Chatbot With Huggging Face
 
HTML5 生态系统和应用架构模型
HTML5 生态系统和应用架构模型HTML5 生态系统和应用架构模型
HTML5 生态系统和应用架构模型
 

我对Go语言一点理解