Go语言学习ppt课件_第1页
Go语言学习ppt课件_第2页
Go语言学习ppt课件_第3页
Go语言学习ppt课件_第4页
Go语言学习ppt课件_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Go语言分享,Go简介环境搭建HelloWorldWeb框架,1,Go简介,Go(又称Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。Go语言是2007年开发2009年发布的一款开源编程语言Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C+代码的速度,而且更加安全、支持并行进程。Go是一种跨平台(MacOS、Windows、Linux等)静态编译型语言。拥有媲美C语言的强大性能,在普通计算机上能几秒内快速编译一个大项目,开发效率跟动态语言相差无几。很多开源项目都是使用Go语言开发的,其中包括Docker、Etcd、Codis、Consul和Kubernetes。,2,Go大神,Go语言的主要开发者有:肯.汤姆逊(KenThompson)、罗布.派克(RobPike)和罗伯特.格里泽默(RobertGriesemer)。这三个都是大神肯.汤姆逊(KenThompson):图灵奖(计算器界的诺贝尔奖)得主,Uinx发明人(Linux基于Uinx内核开发),B语言作者(C语言前身),还做飞行员,后来被谷歌挖走。罗布.派克(RobPike):Unix团队和Plan9操作系统计划的成员,与Ken老爷子共事多年,并共创出广泛使用的UTF-8字符编码。罗伯特.格里泽默(RobertGriesemer):曾协助制作Java的HotSpot编译器,和Chrome浏览器的JavaScript引擎V8膜拜一下大神的容颜:Ken老爷子(左),RobPike(右),3,开发Go语言的初衷,根据Go语言开发者自述,近10多年,从单机时代的C语言到现在互联网时代的Java,都没有令人满意的开发语言,而C+往往给人的感觉是,花了100%的经历,却只有60%的开发效率,产出比太低,Java和C#的哲学又来源于C+。并且,随着硬件的不断升级,这些语言不能充分的利用硬件及CPU。Go的主要目标是,兼具Python等动态语言的开发速度和C/C+等编译型语言的性能与安全性Go语言的所有设计者都说,设计Go语言是因为C+给他们带来了挫败感。在GoogleI/O2012的Go见面会上,RobPike是这样说的:我们做了大量的C+开发,厌烦了等待编译完成,尽管这是玩笑,但在很大程度上来说也是事实。,4,Go语言特性,静态编译(编译器将源代码编译成二进制(或字节码)格式;在编译代码时,编译器检查错误、优化性能并输出可在不同平台上运行的二进制文件,Go语言保证了既能到达静态编译语言的安全和性能,又达到了动态语言开发速度和易维护性,有人形容Go语言:Go=C+Python,说明Go语言既有C静态语言程序的运行速度,又能达到Python动态语言的快速开发)类型安全内存安全(自动垃圾回收)编译速度快(构建一个程序的时间只需要数百毫秒)函数可以返回多个值反射网络编程、系统编程、并发编程、分布式编程。部署简单、并发性好、语言设计良好、执行性能好。,5,Go环境搭建,官网下载地址:,6,Unix/Linux上安装Go环境,#tar-zxvfxxx.tar.gz解压#vim/.bashrc或(vim/etc/profile)#exportGOROOT=/Users/liang/software/go1.10.3#exportPATH=$GOROOT/bin:$PATH#exportGOPATH=/Users/liang/ideaWorkspace/go#source/.bashrc或(source/etc/profile)配置生效#goversion,7,Godep安装(类似maven包管理),#,#godepgobuild项目编译成二进制文件,执行二进制文件启动项目如:./web-demo#godepsave此时会生成Godeps文件夹,同时将引用的包放入vendor文件夹中。Godeps.json就相当于java的maven里pom.xml。如果GOPATH路径下没有依赖包会报找不到包,需要手动下载,如:#,8,HelloWorld,packagemain/声明本文件的package名importfmt/import语言的fmt库-用于输出funcmain()fmt.Println(Hello,World!)/gorunhelloworld.go实际是编译成二进制文件再执行/gobuildhelloworld.go/./helloworld/*第一行代码packagemain定义了包名。你必须在源文件中非注释的第一行指明这个文件属于哪个包,如:packagemain。packagemain表示一个可独立执行的程序,每个Go应用程序都包含一个名为main的包。下一行importfmt告诉Go编译器这个程序需要使用fmt包(的函数,或其他元素),fmt包实现了格式化IO(输入/输出)的函数。下一行funcmain()是程序开始执行的函数。main函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有init()函数则会先执行该函数)。*/,9,变量常量,packagemainimportfmtfuncmain()/声明初始化一个变量varxint=100varstrstring=helloworld/声明初始化多个变量vari,j,kint=1,2,3/不用指明类型,通过初始化值来推导varb=true/bool型constLENGTHint=10/常理fmt.Println(x,str,i,j,k,b,LENGTH)abc()funcabc()varv21int32/被定义初始化为0varv22int=2varv23=3/被自动识别为int类型v24:=4/简易声明v21=int32(v23)/强制转换g,h:=123,hello/注意:下行这种不带声明格式的只能在函数体中出现fmt.Println(v21is,v21)/v21被赋新值fmt.Println(v22is,v22)fmt.Println(v23is,v23)fmt.Println(v24is,v24)fmt.Println(g,h),10,数组,packagemainimportfmtfuncmain()vara5intfmt.Println(arraya:,a)a1=10a3=30fmt.Println(assign:,a)fmt.Println(len:,len(a)b:=5int1,2,3,4,5fmt.Println(init:,b)varc23intfori:=0;i2;i+forj:=0;j3;j+cij=i+jfmt.Println(2d:,c),11,多返回值,packagemainimportfmtfuncmain()v,e:=multi_return(one)fmt.Println(v,e)/输出1truev,e=multi_return(four)fmt.Println(v,e)/输出0false/通常的用法(注意分号后有e)ifv,e=multi_return(four);e/正常返回else/出错返回funcmulti_return(keystring)(int,bool)m:=mapstringintone:1,two:2,three:3varerrboolvarvalintval,err=mkeyreturnval,err,12,packagemainimportfmttypePersonstructnamestringageintemailstringfuncmain()/初始化person:=PersonTom,30,tomfmt.Println(person)/输出Tom30tomvarperson2=Personname:jan,age:24,email:janfmt.Println(person2)pPerson:=&personfmt.Println(pPerson)/输出&Tom30tompPerson.age=40=Jerryfmt.Println(person)/输出Jerry40tom,结构体,13,结构体方法,packagemainimportfmttyperectstructwidth,heightintfunc(r*rect)area()int/求面积returnr.width*r.heightfunc(r*rect)perimeter()int/求周长return2*(r.width+r.height)/注意:Go语言中没有public,protected,private的关键字,所以,如果你想让一个方法可以被别的包访问的话,/你需要把这个方法的第一个字母大写。这是一种约定。funcmain()r:=rectwidth:10,height:15fmt.Println(面积:,r.area()fmt.Println(周长:,r.perimeter()rp:=&rfmt.Println(面积:,rp.area()fmt.Println(周长:,rp.perimeter(),14,接口和多态,packagemainimport(mathfmt)/-接口-/typeshapeinterfacearea()float64/计算面积perimeter()float64/计算周长/-长方形-/typerectsstructwidth,heightfloat64func(r*rects)area()float64/面积returnr.width*r.heightfunc(r*rects)perimeter()float64/周长return2*(r.width+r.height)/-圆形-/typecirclestructradiusfloat64func(c*circle)area()float64/面积returnmath.Pi*c.radius*c.radiusfunc(c*circle)perimeter()float64/周长return2*math.Pi*c.radius/-接口的使用-/funcmain()r:=rectswidth:2.9,height:4.8c:=circleradius:4.3s:=shape&r,&c/通过指针实现for_,sh:=rangesfmt.Println(sh)fmt.Println(sh.area()fmt.Println(sh.perimeter(),15,httpserver(监听一个端口如此简单),packagemainimport(net/httpfmtlog)funcmain()/http请求处理http.HandleFunc(/test,test)fmt.Print(httpserverstart.)/绑定监听地址和端口log.Fatal(http.ListenAndServe(:8080,nil)functest(whttp.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论