资源描述:
《Go语言编程v2.0》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、What?Godaddy(去你爹,X)Goahead(去个头,X)Golang(Go语言,YES)12年9月23日星期日2Goahead...12年9月23日星期日3Golangis一个在语言层面实现了并发机制的类C通用型编程语言12年9月23日星期日4WhyGolang?云计算时代,多核化和集群化是趋势传统软件不能充分利用硬件资源传统编程语言多核并发支持比较繁琐生产效率,少即是多12年9月23日星期日5Go前世今生1995BellLabs,Plan9->Inferno(Limbo)2007/09Google's2
2、0%project2008/05Googlefull-timeproject2009/11officiallyannounced2012/03Go1Released12年9月23日星期日6Go语言特性语言层面支持并发编程(go)优雅的错误处理机制(defer)简洁而又强大的面向对象表达(OOP)非侵入式接口(Interface)可扩展(Cgo)12年9月23日星期日7特性(1)Go在语言层面支持并发12年9月23日星期日8普通并发//inJava(简化,用标准库中的线程模拟并发)publicclassMyThread
3、implementsRunnable{Stringarg;publicMyThread(Stringa){arg=a;}publicvoidrun(){//...}publicstaticvoidmain(String[]args){newThread(newMyThread("test")).start();//...}}12年9月23日星期日9Go语言的并发funcrun(argstring){//...}funcmain(){gorun("test")...}12年9月23日星期日10goroutine启动一
4、个异步过程funcfoo(arg1T1,arg2T2){!//...}gofoo(arg1,arg2)12年9月23日星期日11goroutine交互//等待结束funcfoo(arg1T1,arg2T2,donechanbool){!//...!done<-true}done:=make(chanbool)gofoo(arg1,arg2,done)//...<-done//得到结果12年9月23日星期日12CSP没有共享内存,更没有内存锁通信靠channels来传递消息12年9月23日星期日13特性(2)优雅的错
5、误处理机制12年9月23日星期日14Go错误处理范式//文件操作file,err:=os.Open(fileName)iferr!=nil{return}deferfile.Close()…//操作已经打开的f文件//锁操作varmutexsync.Mutex//...mutex.Lock()defermutex.Unlock()...//正常代码12年9月23日星期日15内建error类型typeerrorinterface{Error()string}12年9月23日星期日16普通资源释放//InJavaConnec
6、tionconn=...;try{Statementstmt=...;try{ResultSetrset=...;try{...//正常代码}finally{rset.close();}}finally{stmt.close();}}finally{conn.close();}12年9月23日星期日17Go的资源释放//InGolangconn:=...deferconn.Close()stmt:=...deferstmt.Close()rset:=...deferrset.Close()...//正常代码12年9月23
7、日星期日18特性(3)简洁而又强大的面向对象表达12年9月23日星期日19结构体(Struct)//是类,不只是结构体typeFoostruct{!aint!bstring}func(this*Foo)Bar(arg1T1,arg2T2,...)(out1RetT1,...){!//...}12年9月23日星期日20面向对象typePointstruct{x,yint}func(p*Point)Get()(int,int){//Publicreturnp.x,p.y}func(p*Point)Put(x,yint)
8、{//Publicp.x=xp.y=y}func(p*Point)add(x,yint)int{//privatereturnp.x+p.y}12年9月23日星期日21模拟继承typeYetAnotherPointerstruct{Point//匿名字段zint}func(p*YetAnotherPointer)Get()(int,int,int){retu