go语言学习指南
just go!
清平
2016-06
Why:试图抽象出一个大纲,用于各种编程语言的分享
How:通过go语言分享来实践一把,大家共同完善
What:适用于各种编程语言的分享的大纲
大纲
1. 背景
2. 语法
3. 数据结构
4. 特性
5. 标准库
6. SDK
7. 框架
1. 编程语言有那些种类?
2. 为什么要学习新的编程语言?
3. 如何学习一门新的编程语言?
1.背景 -- 起源
Rob Pike
Languages created: squeak, newsqueak,
Sawzall, Go.
Worked at: Bell Labs, Google.
invented: UTF-8
Robert Griesemer
Languages created:Sawzall, Go
V8 JavaScript engine
Java HotSpot virtual machin
Chubby
Ken Thompson
Languages created: B, Go.
Unix
Plan 9
Worked at: Bell Labs, Google.
1.背景
Less is more,Less can be more
1.背景--版本
1.背景--安装环境
export GOROOT=/Users/qpzhang/dev/go
export GOPATH=/Users/qpzhang/gocode
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
go version
go help
1. 背景 -- 开源系统
大纲
1. 背景
2. 语法
3. 数据结构
4. 特性
5. 标准库
6. SDK
7. 框架
2.语法 -- keywords(25个)
package
import
func
var
type
const
chan
map
struct
interface
for
range
select
switch
case
fallthrough
break
continue
default
return
if
else
goto
defer
go
2.语法 -- 基本类型和函数
int
int8
int16
int32
int64
uint
uint8
uint16
uint32
uint64
bool
byte
iota
string
float32
float64
complex
complex64
complex128
append
cap
close
copy
imag
len
make
new
panic
print
println
real
recover
2.语法 -- 分隔符和操作符
+ & += &= && == != ( )
- | -= |= || < <= [ ]
* ^ *= ^= <- > >= { }
/ << /= <<= ++ = := , ;
% >> %= >>= -- ! ... . :
&^ &^=
2.语法 -- package
http://labix.org/gopkg.in
2.语法 -- 变量
2.语法 -- 变量
2.语法 -- 常量
2.语法 -- for循环
2.语法 -- if & switch
2.语法 -- switch
2.语法 -- 函数
2.语法 -- 函数
//1
//2
//3
//1
2.语法 -- 方法
2.语法 -- interface
优先选择组合而非继承
--设计模式原则
为什么需要interface ?
怎么去做选择,一定要做选择么?
一个程序只做一件事,并做好它。
-- 《UNIX编程艺术》
大纲
1. 背景
2. 语法
3. 数据结构
4. 特性
5. 标准库
6. SDK
7. 框架
3.数据结构 -- array & slice
3.数据结构 -- map
大纲
1. 背景
2. 语法
3. 数据结构
4. 特性
5. 标准库
6. SDK
7. 框架
4.特性 -- defer、panic、recover
4.特性 -- channel、goroutine 4K
4.特性 -- channel、goroutine
4.特性 -- channel、goroutine
M: 内核OS线程
G: goroutine
P:调度器
4.特性 -- select
4.特性 -- error are values
大纲
1. 背景
2. 语法
3. 数据结构
4. 特性
5. 标准库
6. SDK
7. 框架
5.标准库
flag
os
io
net
mime
html
time
crypto
hash
compress
byte
fmt
strings
strconv
encoding
regexp
database
testing
runtime
debug
log
reflect
大纲
1. 背景
2. 语法
3. 数据结构
4. 特性
5. 标准库
6. SDK
7. 框架
6.SDK
gopkg.in/mgo.v2
gopkg.in/redis.v3
gopkg.in/gorp.v1 (mysql)
gopkg.in/yaml.v2
github.com/golang/oauth2
github.com/aws/aws-sdk-go
github.com/golang/glog
github.com/inconshreveable/log15
github.com/alecthomas/log4go
gopkg.in/zeromq/czmq.v2
github.com/streadway/amqp
github.com/deuill/go-php
github.com/sbinet/go-python
github.com/Shopify/go-lua
github.com/robertkrimen/otto (js)
github.com/Workiva/go-datastructures
github.com/sjwhitworth/golearn
github.com/cdipaolo/goml
github.com/visualfc/goqt (cn)
github.com/derekparker/delve
more...
github.com/urfave/negroni (martini)
github.com/facebookgo/grace
github.com/gogo/protobuf
大纲
1. 背景
2. 语法
3. 数据结构
4. 特性
5. 标准库
6. SDK
7. 框架
7.框架
WebFramework
Beego(CN) github.com/astaxie/beego
Martini github.com/go-martini/martini
gin(new) github.com/gin-gonic/gin
revel
github.com/revel/revel
microservices
goa github.com/goadesign/goa (design first、
autogen、plugin)
go-kit github.com/go-kit/kit (twitter/finagle)
micro github.com/micro/micro (ecosystem)
kite(koding) github.com/koding/kite
more
Se ascolto dimentico,
se vedo ricordo,
se faccio imparo
不闻不若闻之,
闻之不若见之,
见之不若知之,
知之不若行之;
学至于行之而止矣
--荀子
我听过了,我就忘了;
我看见了,我就记得了;
我做过了,我就理解了。
--蒙特梭利
学习步骤
1. vimgo  Sublime
1. 《An Introduction to Programming in Go.pdf》
《Network programming with Go.pdf》
The Go Programming Language
Specification
1. SDK、项目、框架 、dotgo gopheracademy
ready for go ?
参考资料
http://dave.cheney.net/resources-for-new-go-programmers
http://www.oschina.net/translate/why-program-in-go?print
http://guolei.us/sanjuban-go-birth/
http://www.slideshare.net/while42/an-introduction-to-programming-in-go
http://gopl-zh.b0.upaiyun.com/ch0/ch0-01.html
http://labix.org/gopkg.in
https://golang.org/ref/spec
https://blog.golang.org/errors-are-values
http://morsmachine.dk/go-scheduler

More Related Content

PPT
開放原始碼的回收與再利用
PPT
将bug尽可能扼杀在开发阶段
PPTX
Github初上手教學
PDF
rakesh kumar
PPTX
Openstack openswitch basics
PDF
Intel DPDK Step by Step instructions
PPTX
Understanding DPDK algorithmics
PPTX
Understanding DPDK
開放原始碼的回收與再利用
将bug尽可能扼杀在开发阶段
Github初上手教學
rakesh kumar
Openstack openswitch basics
Intel DPDK Step by Step instructions
Understanding DPDK algorithmics
Understanding DPDK

Similar to Go语言学习指南 (12)

DOC
Go Lang
KEY
Golang
PPTX
Golangintro
PDF
PDF
PDF
PPTX
Golang 入門初體驗
PDF
模块一-Go语言特性.pdf
PPT
Go语言: 互联网时代的C
PPTX
Groovy:Candy for Java Developers
PPTX
Go 語言基礎簡介
PDF
Ruby基础培训
Go Lang
Golang
Golangintro
Golang 入門初體驗
模块一-Go语言特性.pdf
Go语言: 互联网时代的C
Groovy:Candy for Java Developers
Go 語言基礎簡介
Ruby基础培训
Ad

Go语言学习指南

Editor's Notes

  • #2: go语言老司机带路,让你对go语言背景和基础有个全面的了解,方便入门,并给出进阶路线,以免走弯路。 本分享适用于以下三类人群: 1)听过go语言,想了解一下的 2)对go语言感兴趣,想学习一下的 3)对如何分享或学习一门编程语言感兴趣的,等等
  • #3: why:公司语言繁多(ruby\java\python\php\go...),势必会有各种语言的分享, 包括今后新的环境,也会出现,所以试图抽象出一个方法论,用于编程语言的分享 how:借用这次go语言来实践一把,大家共同完善
  • #4: 背景:了解背景,可以知道语言为解决什么问题而诞生? ruby?java ? 语言、数据结构是基础知识 特性:相对于其它编程语言来说,比较有特色的 标准库、SDK就是进阶(各种轮子),框架那是思想升华(比较通用)。
  • #5: Programming languages evolve and are improved with time (innovation).People take ideas from different languages and combine them into a new languages(MIX). Some features are improved (inheritance mechanisms, type systems), some are added (garbage collection, exception handling), some are removed (goto statements, low-level pointer manipulations).Go项目是在Google公司维护超级复杂的几个软件系统遇到的一些问题的反思(但是这类问题绝不是Google公司所特有的)。http://cs.stackexchange.com/questions/451/why-are-there-so-many-programming-languages
  • #6: go语言源于google,为了解决google的各种问题。 c++的项目大,而且多,编译速度慢,并发写起来并不轻松等。。。
  • #7: 但是当他听说新的 C++ 内存模型有原子类型时,他受不了了。在Rob看来,将语言和硬件结合的过于紧密是一件愚蠢的事情。回到办公室,抽了根烟,Rob很深沉的对Robert和Ken说,他希望在写 Google 代码的时候能够轻松的实现并发,而不是像Fuck的C++一样。当一个喷子一个人喷的时候,他也就只能喷喷;但是当三个伟大的喷子一起喷的时候,他们就可以喷出一门新的语言。 强类型、动态和并发,分别是三个人的代表。
  • #8: 顺序通信进程 ( communicating sequential processes ,缩写为CSP.在CSP中,程序是一组中间没有共享状态的平行运行的处理过程,它们之间使用管道进行通信和控制同步(同样基于CSP实现的还有Erlang) 第二代的Oberon-2语言直接影响了包的导入和声明的语法 Go从C语言继承了相似的表达式语法、控制流结构、基础数据类型、调用参数传值、指针等很多思想 它没有隐式的数值转换,没有构造函数和析构函数,没有运算符重载,没有默认参数,也没有继承,异常捕获, 没有泛型,没有宏,没有函数修饰,更没有线程局部存储。
  • #9: 正式发布5周年。 2013年,快速发展,版本更新最多,到2014年逐渐稳定。
  • #11: CoreOS:是一种新的、架构体系重新设计的Linux发行版,可以运行在既有的硬件或者云上。CoreOS使用systemd和fleet来对容器进行管理,通过 etcd进行服务发现和配置信息共享。 Flynn:是一个使用Go语言编写的开源PaaS平台,Flynn使用模块化的设计,任何一个模块都可以独立的进行修改、升级和替换。Flynn的目标是简化分布式环境中应用的部署和维护,通过使用 git push命令,Flynn就可以将应用部署到Docker,从而省去了复杂的配置和操作。Flynn目前仍在开发中,尚未发布稳定版,但已经获得了很多公司的资助,它被称为是下一代的开源PaaS平台。 Deis:是一个基于Docker和CoreOS的开源PaaS平台,旨在让部属和管理服务器上的应用变得轻松容易 FIg: docker收购,用于维护和管理docker InfluxData: 一个Go语音编写的开源分布式的时序、事件和指标数据库,无需外部依赖。其设计目标是实现分布式和水平伸缩扩展。 Syncthing: 一款用Go语言编写的开源云存储和同步服务工具,用户的数据将由自己完全控制,所有的通信全都加密,每个访问节点都用加密证书验证。该项目被认为是Dropbox和 BitTorrent Sync的开源替代 Lime Text: Sublime Text的开源实现
  • #12: 开始进入枯燥的部分了
  • #13: 1.定义类型 2.逻辑控制 3.功能性
  • #14: 该有的都有,不该有的,也有一些。
  • #16: 通过go get 来获取,会拉取最新的代码, 所以这块儿有个packege的标准控制。 package管理还在完善, 很多工具可以提供commit、version的支持。后续会引入到官方标准包管理中。
  • #19: const 也可以换成 var ,表示一批变量的定义
  • #20: 没有括号 前后可以为空 都为空时,可以当做while循环
  • #21: plan 9,一个伤痛。。。
  • #23: 单返回值,多返回值。
  • #24: 1.lambda语法 2.闭包 3. 闭包实现柯理化
  • #25: 方法,就是多了一个接收者。 通过首字母大小写来定义该方法,是否可以被package之外的人调用。(大写plubic、小写private)
  • #26: 接口的存在,是为了实现动态。 第二个设计模式原则 -- 优先选择组合而非继承,简化,干脆不要让你来分辨是要选择那个。
  • #27: 开始进入枯燥的部分了
  • #28: slice 可以理解为,动态数组。 范围访问 (start:end] , 起始下标,结束下标(但不包含该元素)。
  • #29: 没有了,内嵌的数据结构就这两个。 然后就是标准库的string、hash、heap等
  • #31: 同一个生命周期内(函数), 多个defer定义是栈的形式,先进后出。 panic之后,程序会退出,所以为了防止意外退出,我们可以通过defer和recover来进行panic的捕获和修复 还可以通过defer进行一些收尾工作(资源释放、日志记录、统计上报等)
  • #32: channel:以通信来共享内存,而非以共享内存来通信。 一个线程就是一个栈加一堆资源,goroutine只需要4k来存储栈信息,用于切换。 goroutine have a very small footprint (use little memory and resources): they are created with a 4K memory stack-space on the heap
  • #34: goroutine类似C++下面的线程池,但是做了很大的提升 a)go关键字极大的简化了C/C++下往线程池投递任务的操作, b)goroutine的调度器解决了一般线程池常见的问题,就是遇到阻塞或者同步动作时(Epool),怎么让线程池更容易扩展,不会因为其中一个任务的阻塞或者同步独占线程,甚至怎么避免由此问题带来的死锁。 系统调用时,调度G 去其它空闲的M 如果M空闲了,M中的队列里面,拿一般的任务过来。 G阻塞在系统io时,可以暂时丢到等待队列里头。
  • #35: 没有default
  • #36: 优化的进行错误处理的方式。。。
  • #38: 命令行参数,系统操作(环境变量、文件) 字符串操作、字符串转换、json,xml等解析,正则,数据库的driver 文件读取,网络接口,加密,压缩等 测试、运行时调试、反射
  • #40: gorp : mysql goqt 国人自己搞的(go语言 LiteIDE作者)
  • #42: 七牛,没有开源。。。 goa 比较有特色,design first gokit 想的周全, 野心比较大,直接把twitter的技术栈(twitter/finagle)搬过来( metrics, log, transport, loadbanlance等) 重点介绍gokit的一些微服务概念(服务发现、耗时统计、信息采集、负载均衡、频率限制、断路器防雪崩等)
  • #44: 打怪升级。。。