Go语言互联网时代的.ppt

上传人:牧羊曲112 文档编号:6506618 上传时间:2023-11-07 格式:PPT 页数:29 大小:264.50KB
返回 下载 相关 举报
Go语言互联网时代的.ppt_第1页
第1页 / 共29页
Go语言互联网时代的.ppt_第2页
第2页 / 共29页
Go语言互联网时代的.ppt_第3页
第3页 / 共29页
Go语言互联网时代的.ppt_第4页
第4页 / 共29页
Go语言互联网时代的.ppt_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《Go语言互联网时代的.ppt》由会员分享,可在线阅读,更多相关《Go语言互联网时代的.ppt(29页珍藏版)》请在三一办公上搜索。

1、Go语言:互联网时代的C,Googol Lee googollee,Beta技术沙龙,官方twitter:betasalon,Ken Thompson,Summery,系统级开发现状新需求需要新模型Go对并发的支持Go的语法特点,系统测开发现状,要求高并发要求开发速度要求性能好要求可分布,系统测开发现状,C/C+写的好的话速度快,内存利用率高写不好的话内存泄露Core dump语言层面完全没有对并发有支持裸用os的并发机制:线程/进程,系统测开发现状,Java速度快,语言不灵活语言层面有一定的并发支持,基于os并发机制PHP/Python/Ruby开发速度快,灵活速度慢语言层面依旧裸用os的并

2、发机制,甚至不提供或者有限制(GIL)Twisted/asyncore/Multiprocess,能否开发快,性能高?,新模型,新的编程模型(CSP),在语言层面加入对并发支持而不是以库形式提供更高层次的并发抽象而不是直接暴露os的并发机制应用ErlangOcaml,GO并发模型,GoroutineChannelRpc内存模型,并发模型-goroutine,轻量Goroutine间是并行的底层混合使用非阻塞IO和线程关键字:go,并发模型-channel,通过通信来共享而不是通过共享来通信对channel的读写是阻塞的读阻塞到读出内容写阻塞到内容写入bufferchannel的两个功能传值同步

3、,例子-筛法求素数,例子,func generate(ch chan int)for i:=2;i+ch-i/Send i to channel ch.func filter(in,out chan int,prime int)for I:=-in/Receive value of new variable i from in.if i%prime!=0 out-i/Send i to channel out.func main()runtime.GOMAXPROCS(1);ch:=make(chan int)/Create a new channel.go generate(ch)/Star

4、t generate()as a goroutine.for prime:=-ch fmt.Println(prime)ch1:=make(chan int)go filter(ch,ch1,prime)ch=ch1,例子-续,Strace结果:并发手段:有Println:有一次clone,占用一个core可以在write时继续进行计算需要futex做同步没有Println:没有clone,占用一个core在chan读写时切换goroutine没有同步信号量,select,同时监听多个channelfor/loop forever select case req:=-service:/proc

5、ess the request case-quit:return;/quit loop,RPC,远程调用使用golang库gob作序列化目前只能用http做serverhttp使用长链接限制gob不能序列化函数和channel,例子,type Class struct func(p*Class)Function(a*Args,r*Reply)os.Error/serverfunc main()a:=new(module.Class);rpc.Register(a);rpc.HandleHTTP();l,e:=net.Listen(tcp,:1234);http.Serve(l,nil);/cl

6、ientfunc main()client,err:=rpc.DialHTTP(tcp,127.0.0.1:1234);args:=,内存模型,简化并发编程必须有GC参与单件如何释放初始化Import package的init包间顺序不定包里goroutine在所有init之后才执行Main package的main,内存模型,原子IO对变量的读写都是原子的c/c+的变量读写都不是原子的乱序仅保证在goroutine内,乱序后执行结果不变once安全的初始化手段Lock用channel更好,语法细节-原则,简化语法混合了C和Python便于解析加快编译速度,语法细节 值 vs 引用,值类型创建

7、基本类型字面量:0,1.1,c,”string”,3int1,2,3/.构造Point1,1具有引用语义的基本类型:maps,slice,channelmaps,channel的值类型必须用make创建指针空指针:nil没有指针运算-需要指针运算时应该用slice创建var pInt*int=var point*Point=&Point1,1,语法细节-slice,定义方法数组:var array 100intslice:var slice intslice可以对数组内任意一段做引用slice=arrayX:Ylen(slice)=Y Xcap(slice):slice实际占用的内存取代指针,

8、安全的数组引用slice=&array等同于slice=array0:len(array),语法细节 类,定义方式类似Ctype SomeClass struct func(self*SomeClass)method(.)调用方式类似C+var class*SomeClass=,语法细节 非继承,动态绑定interfacetype PrintInterface interface print();type Printable struct/no inherit herefunc(p*Printable)print()var i PrintInterface=&Printable i.print

9、()Any可以传入任意类型type Any interface 调用方式any.(PrintInterface).print(),语法细节-type,True typedef让错误的代码显而易见直接报错软件随想录P189例子:type UnsafeString string;type SafeString string;var input UnsafeString=form.data;var valid SafeString;valid=input;/compile error.valid=SafeString(input);/can convert with cast,语法细节 const,

10、常量不用定义类型const MAX_NUMBER=100;const DEFAULT_STRING=“string”;枚举是特殊的常量,特殊递增符iotaconst(_=iota/ignore A=iota*2/1*2=2 B/2*2=4,inherit from above C/3*2=6 _/ignore,iota=4 D/5*2=10),语法细节-实现C+0 x,Autox:=6;y:=make(chan int);Concept使用Interface在运行期实现GCLambdasomeFunc=func()someFunc()闭包,包管理,首字母大写是public,小写是private需要预先编译才能import已有库*nix/c标准库-os,randC互操作-CContainer-heap,list,ring,vector,hashgolang的词法/语法分析库 ast网络库-websocket,http,json,Q&A,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号