SlideShare a Scribd company logo
淘宝技术部-互动社区
龙犽
我对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
• 书籍:
• 开源项目
谢谢

More Related Content

Similar to 我对Go语言一点理解

Go for web
Go for webGo for web
Go for web
Weng Wei
 
從 Java programmer 的觀點看 ruby
從 Java programmer 的觀點看 ruby從 Java programmer 的觀點看 ruby
從 Java programmer 的觀點看 ruby
建興 王
 
Hybrid app简要介绍
Hybrid app简要介绍Hybrid app简要介绍
Hybrid app简要介绍
Eric Xiao
 
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!
 
用 Kotlin Multiplatform 創建跨平台的 Android DeepLink 測試工具:Compose Desktop 實踐分享
用 Kotlin Multiplatform 創建跨平台的 Android DeepLink 測試工具:Compose Desktop 實踐分享用 Kotlin Multiplatform 創建跨平台的 Android DeepLink 測試工具:Compose Desktop 實踐分享
用 Kotlin Multiplatform 創建跨平台的 Android DeepLink 測試工具:Compose Desktop 實踐分享
Ray Yuan Liu
 
React-Native share
React-Native shareReact-Native share
React-Native share
Eddie Hsu
 
三十分鐘內,不用寫程式,教你打造具自然語言能力的聊天機器人
三十分鐘內,不用寫程式,教你打造具自然語言能力的聊天機器人三十分鐘內,不用寫程式,教你打造具自然語言能力的聊天機器人
三十分鐘內,不用寫程式,教你打造具自然語言能力的聊天機器人
Ko Ko
 
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
 
Building Chatbot With Huggging Face
 				Building Chatbot With Huggging Face 				Building Chatbot With Huggging Face
Building Chatbot With Huggging Face
Ko Ko
 
20240518 將 Google Gemini 整合至 Angular 成為互動式 AI 應用程式.pdf
20240518 將 Google Gemini 整合至 Angular 成為互動式 AI 應用程式.pdf20240518 將 Google Gemini 整合至 Angular 成為互動式 AI 應用程式.pdf
20240518 將 Google Gemini 整合至 Angular 成為互動式 AI 應用程式.pdf
Kun-Neng Hung
 
HTML5 生态系统和应用架构模型
HTML5 生态系统和应用架构模型HTML5 生态系统和应用架构模型
HTML5 生态系统和应用架构模型Tom Fan
 

Similar to 我对Go语言一点理解 (12)

Go for web
Go for webGo for web
Go for web
 
從 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
 
20240518 將 Google Gemini 整合至 Angular 成為互動式 AI 應用程式.pdf
20240518 將 Google Gemini 整合至 Angular 成為互動式 AI 應用程式.pdf20240518 將 Google Gemini 整合至 Angular 成為互動式 AI 應用程式.pdf
20240518 將 Google Gemini 整合至 Angular 成為互動式 AI 應用程式.pdf
 
HTML5 生态系统和应用架构模型
HTML5 生态系统和应用架构模型HTML5 生态系统和应用架构模型
HTML5 生态系统和应用架构模型
 

我对Go语言一点理解