go语言底层原理简析.ppt

go语言底层原理简析.ppt

ID:50174292

大小:2.57 MB

页数:53页

时间:2020-03-06

go语言底层原理简析.ppt_第1页
go语言底层原理简析.ppt_第2页
go语言底层原理简析.ppt_第3页
go语言底层原理简析.ppt_第4页
go语言底层原理简析.ppt_第5页
资源描述:

《go语言底层原理简析.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、go语言底层原理浅析主讲人:葛午未组员:xxx1数据结构数据类型值类型:byte、int、int32、float32、float64、string、数组…引用类型:slice、map、channel注:引用类型可以简单的理解为指针类型,它们都是通过make完成初始化数组与切片数组结构示意:切片结构示意:数组与切片数据结构:切片扩容:如果新的大小是当前大小2倍以上,则大小增长为新大小;否则循环以下操作:如果当前大小小于1024,按每次2倍增长;否则每次按当前大小1/4增长;数组与切片例子:结果:数组与切片分析:map结构示意:查找过程:按key的类型采用相应的hash算法得到key的hash值

2、;将hash值的低位当作Hmap结构体中buckets数组的index;将hash的高8位存储在了bucket的tophash中,高8位作为主键顺序匹配tophash中的值,找到对应key,继而找到value;mapmap数据结构:bucket数据结构:map增量扩容:哈希表大小始终为2的指数倍,每次扩容都变为原来大小的两倍。如,扩容前的哈希表大小为2^B,扩容之后的大小为2^(B+1);扩容后,需将旧的pair重新哈希到新的table上,该过程并非一次到位,而是逐步完成,如,insert或remove时每次搬移1-2个pair;只有所有的bucket都从旧表移到新表之后,才会将oldbuc

3、ket释放掉。扩容时机(扩容填充因子):如果grow的太频繁,会造成空间的利用率很低,如果很久才grow,会形成很多的overflowbuckets,查找的效率也会下降。#defineLOAD6.5:如果table中元素的个数大于table中能容纳的元素个数的65%,则触发扩容。map结构定义:并发写:fatalerror:concurrentmapwrites运行结果:例子:map解决方案:注意事项:golang内建map不是并发安全的;interface空接口结构:interface可以被当作“duck”类型使用。go是类型安全的,类型之间不能相互转换,类型可以与interface进行转

4、换。具体类型结构:该类型实现的所有方法interface带方法的接口结构:带方法的interface底层使用的数据结构与空interface不同,它是实现运行时多态的基础。虚表类型结构:接口声明的方法列表类型定义的方法列表例如:typeIinterface{String()}interface例子:内存结构:6函数调用多值返回C多值返回函数调用方式:go多值返回函数调用方式:多值返回相较于传统C中的callee-save模式,go编译器采用的是caller-save模式,即,由调用者负责保存寄存器。被调函数将运行结果写入栈中的返回结果位,而不像c中将结果pop到eax寄存器。闭包逃逸分析:本

5、应在栈上分配的内存,放在堆上分配了闭包闭包是匿名函数与匿名函数所引用环境的组合。匿名函数有动态创建的特性,该特性使得匿名函数不用通过参数传递的方式,就可以直接引用外部的变量。闭包结构:闭包例子:运行结果:并发情况下,需处理好循环中的闭包引用的外部变量。方法对象的方法调用相当于普通函数调用的一个语法糖衣。funcMv(tvT,aint)intfuncMp(tp*T,ffloat32)float32T.Mv*T.Mp方法“继承”在Go中没有继承,将一个带方法的类型匿名嵌入到另一个结构体中,则这个结构体也会拥有嵌入的类型的方法。func(h*HttpHandler)ServeHTTP(whttp.

6、ResponseWriter,r*http.Request){……}Daemon中没有定义ServeHTTP方法,但“继承”了匿名成员HttpHandler的该方法。方法“多态”typeDrawinterface{ Paint()}typeCircularstruct{ Namestring}func(c*Circular)Paint(){fmt.Println("c:",c.Name)}typeTriangularstruct{ Namestring}func(c*Triangular)Paint(){fmt.Println("c:",c.Name)}funcmain(){ vardraw

7、Draw draw=&Circular{"画一个圆形"} draw.Paint() draw=&Triangular{"画一个三角形"} draw.Paint()}Go本身不具有多态的特性,但是,使用interface可以编写具有多态功能的类绑定的方法。6goroutineG-P-M模型M:os线程(即操作系统内核提供的线程)。G:goroutine,其包含了调度一个协程所需要的堆栈以及instruction

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。