"深入浅出,层层递进,讲解Go语言背后的逻辑
对源码进行逐行解析,系统说明底层原理
上百张精美的说明图,让理论学习不再枯燥晦涩
大量特性实现方法与防坑秘籍,构建优雅高效的工业级代码
深度剖析调试与可视化方法,全面提升对复杂程序的掌控力"
网站首页 软件下载 游戏下载 翻译软件 电子书下载 电影下载 电视剧下载 教程攻略
书名 | Go语言底层原理剖析 |
分类 | 教育考试-考试-计算机类 |
作者 | 郑建勋 |
出版社 | 电子工业出版社 |
下载 | ![]() |
简介 | 编辑推荐 "深入浅出,层层递进,讲解Go语言背后的逻辑 对源码进行逐行解析,系统说明底层原理 上百张精美的说明图,让理论学习不再枯燥晦涩 大量特性实现方法与防坑秘籍,构建优雅高效的工业级代码 深度剖析调试与可视化方法,全面提升对复杂程序的掌控力" 内容推荐 Go语言是一门年轻、简捷,但是强大、高效、充满潜力的服务器语言。本书使用浅显易懂的语言与大量图片深入介绍了Go语言编译时、类型系统、语法特性、函数调用规范、并发编程、内存管理与垃圾回收、运行状态监控等模块的使用方法和底层原理,并举例说明了构建大型软件工程需要遵循的设计规则,让作者系统并完整掌握Go语言隐藏在使用方法背后的底层细节。 本书适合有一定工作经验的开发工程师进一步提升自己,以便更好地开发软件、系统架构,并进行工作面试。也可以作为高等院校计算机专业师生学习编程语言设计原理的参考教材。 目录 目录 第1章 深入Go语言编译器\t1 1.1 为什么要了解Go语言编译器\t1 1.2 Go语言编译器的阶段\t1 1.3 词法解析\t3 1.4 语法解析\t4 1.5 抽象语法树构建\t6 1.6 类型检查\t8 1.7 变量捕获\t8 1.8 函数内联\t9 1.9 逃逸分析\t12 1.10 闭包重写\t14 1.11 遍历函数\t15 1.12 SSA生成\t15 1.13 机器码生成――汇编器\t18 1.14 机器码生成――链接\t20 1.15 ELF文件解析\t23 1.16 总结\t26 第2章 浮点数设计原理与使用方法\t27 2.1 浮点数陷阱\t27 2.2 定点数与浮点数\t27 2.3 IEEE-754浮点数标准\t28 2.3.1 小数部分计算\t29 2.3.2 显示浮点数格式\t30 2.4 很好实践:判断浮点数为整数\t31 2.5 常规数与非常规数\t33 2.6 NaN与Inf\t33 2.7 浮点数精度\t34 2.8 浮点数与格式化打印\t36 2.9 浮点数计算与精度损失\t37 2.10 多精度浮点数与math/big库\t38 2.11 总结\t41 第3章 类型推断全解析\t42 3.1 类型推断的优势\t42 3.2 Go语言中类型推断的特性\t43 3.3 类型推断原理\t44 3.3.1 词法解析与语法分析阶段\t44 3.3.2 抽象语法树生成与类型检查\t46 3.4 总结\t48 第4章 常量与隐式类型转换\t49 4.1 常量声明与生存周期\t49 4.2 常量类型转换\t50 4.2.1 隐式整数转换\t50 4.2.2 隐式浮点数转换\t51 4.2.3 常量运算中的隐式转换\t51 4.2.4 常量与变量之间的转换\t51 4.2.5 自定义类型的转换\t52 4.3 常量与隐式类型转换原理\t53 4.4 总结\t55 第5章 字符串本质与实现\t56 5.1 字符串的本质\t56 5.2 符文类型\t57 5.3 字符串工具函数\t58 5.4 字符串底层原理\t59 5.4.1 字符串解析\t59 5.4.2 字符串拼接\t61 5.4.3 运行时字符拼接\t62 5.4.4 字符串与字节数组的转换\t64 5.5 总结\t66 第6章 数组\t67 6.1 数组的声明方式\t67 6.2 数组值复制\t68 6.3 数组底层原理\t68 6.3.1 编译时数组解析\t68 6.3.2 数组字面量初始化原理\t69 6.3.3 数组字面量编译时内存优化\t70 6.3.4 数组索引与访问越界原理\t70 6.4 总结\t73 第7章 切片使用方法与底层原理\t74 7.1 切片使用方法\t74 7.1.1 切片的结构\t74 7.1.2 切片的初始化\t75 7.1.3 切片的截取\t75 7.1.4 切片值复制与数据引用\t76 7.1.5 切片收缩与扩容\t77 7.2 切片底层原理\t78 7.2.1 字面量初始化\t78 7.2.2 make初始化\t79 7.2.3 切片扩容原理\t80 7.2.4 切片截取原理\t82 7.2.5 切片的完整复制\t83 7.3 总结\t84 第8章 哈希表与Go实现机制\t85 8.1 哈希碰撞与解决方法\t85 8.2 map基本操作\t87 8.2.1 map声明与初始化\t87 8.2.2 map访问\t87 8.2.3 map赋值\t88 8.2.4 key的比较性\t88 8.2.5 map并发冲突\t89 8.3 哈希表底层结构\t89 8.4 哈希表原理图解\t91 8.5 深入哈希表原理\t94 8.5.1 make初始化原理\t94 8.5.2 字面量初始化原理\t96 8.5.3 map访问原理\t97 8.5.4 map赋值操作原理\t99 8.5.5 map重建原理\t102 8.5.6 map删除原理\t103 8.6 总结\t104 第9章 函数与栈\t105 9.1 函数基本使用方式\t105 9.2 函数闭包与陷阱\t106 9.3 函数栈\t107 9.4 Go语言栈帧结构\t108 9.5 Go语言函数调用链结构与特性\t110 9.6 堆栈信息\t111 9.7 栈扩容与栈转移原理\t113 9.8 栈调试\t118 9.9 总结\t120 第10章 defer延迟调用\t121 10.1 使用的defer的优势\t122 10.1.1 资源释放\t122 10.1.2 异常捕获\t123 10.2 defer特性\t125 10.2.1 延迟执行\t125 10.2.2 参数预计算\t126 10.2.3 defer多次执行与LIFO执行顺序\t127 10.3 defer返回值陷阱\t127 10.4 defer底层原理\t129 10.4.1 defer演进\t129 10.4.2 堆分配\t130 10.4.3 defer遍历调用\t134 10.4.4 Go 1.13栈分配优化\t137 10.4.5 Go 1.14内联优化\t138 10.5 总结\t140 第11章 异常与异常捕获\t141 11.1 panic函数使用方法\t141 11.2 异常捕获与recover\t142 11.3 panic与recover嵌套\t144 11.4 panic函数底层原理\t145 11.5 recover底层原理\t149 11.6 总结\t152 第12章 接口与程序设计模式\t154 12.1 接口的用途\t154 12.2 Go语言中的接口\t155 12.3 Go接口实践\t156 12.4 Go接口的使用方法\t158 12.4.1 Go接口的声明与定义\t158 12.4.2 接口实现\t159 12.4.3 接口动态类型\t160 12.4.4 接口的动态调用\t161 12.4.5 多接口\t162 12.4.6 接口的组合\t162 12.4.7 接口类型断言\t163 12.4.8 空接口\t164 12.4.9 接口的比较性\t166 12.5 接口底层原理\t166 12.5.1 接口实现算法\t166 12.5.2 接口组成\t168 12.5.3 接口内存逃逸分析\t171 12.5.4 接口动态调用过程\t173 12.5.5 接口动态调用过程的效率评价\t177 12.5.6 接口转换\t182 12.5.7 空接口组成\t184 12.5.8 空接口switch\t187 12.5.9 接口的陷阱\t189 12.6 总结\t191 第13章 反射高级编程\t192 13.1 为什么需要反射\t193 13.2 反射的基本使用方法\t195 13.2.1 反射的两种基本类型\t195 13.2.2 反射转换为接口\t196 13.2.3 Elem()间接访问\t197 13.2.4 修改反射的值\t199 13.2.5 结构体与反射\t200 13.2.6 遍历结构体字段\t200 13.2.7 修改结构体字段\t201 13.2.8 嵌套结构体的赋值\t202 13.2.9 结构体方法与动态调用\t203 13.2.10 反射在运行时创建结构体\t205 13.2.11 函数与反射\t206 13.2.12 反射与其他类型\t206 13.3 反射底层原理\t207 13.3.1 reflect.Type详解\t207 13.3.2 Interface方法原理\t209 13.3.3 Int方法原理\t211 13.3.4 Elem方法释疑\t211 13.3.5 动态调用剖析\t213 13.4 总结\t216 第14章 协程初探\t217 14.1 进程与线程\t217 14.2 线程上下文切换\t219 14.3 线程与协程\t220 14.3.1 调度方式\t220 14.3.2 上下文切换的速度\t220 14.3.3 调度策略\t221 14.3.4 栈的大小\t221 14.4 并发与并行\t221 14.5 简单协程入门\t222 14.6 main协程与子协程\t223 14.7 GMP模型\t225 14.8 总结\t226 第15章 深入协程设计与调度原理\t227 15.1 协程的生命周期与状态转移\t227 15.2 特殊协程g0与协程切换\t228 15.3 线程本地存储与线程绑定\t230 15.4 调度循环\t231 15.5 调度策略\t232 15.5.1 获取本地运行队列\t234 15.5.2 获取全局运行队列\t235 15.5.3 获取准备就绪的网络协程\t236 15.5.4 协程窃取\t237 15.6 调度时机\t238 15.6.1 主动调度\t238 15.6.2 被动调度\t239 15.6.3 抢占调度\t241 15.6.4 执行时间过长的抢占调度\t241 15.7 总结\t247 第16章 通道与协程间通信\t248 16.1 CSP并发编程\t248 16.2 通道基本使用方式\t249 16.2.1 通道声明与初始化\t249 16.2.2 channel写入数据\t250 16.2.3 通道读取数据\t250 16.2.4 通道关闭\t250 16.2.5 通道作为参数和返回值\t252 16.2.6 单方向通道\t253 16.2.7 通道很好实践\t254 16.3 select多路复用\t258 16.3.1 select随机选择机制\t258 16.3.2 select堵塞与控制\t259 16.3.3 循环select\t260 16.3.4 select 与nil\t261 16.4 通道底层原理\t261 16.4.1 通道结构与环形队列\t261 16.4.2 通道初始化\t263 16.4.3 通道写入原理\t263 16.4.4 通道读取原理\t265 16.5 select底层原理\t267 16.5.1 select一轮循环\t269 16.5.2 select二轮循环\t270 16.6 总结\t271 第17章 并发控制\t272 17.1 context\t272 17.1.1 为什么需要Context\t272 17.1.2 Context使用方式\t274 17.2 context原理\t277 17.3 数据争用检查\t280 17.3.1 什么是数据争用\t280 17.3.2 数据争用检查详解\t282 17.3.3 race工具原理\t282 17.4 锁\t286 17.4.1 原子锁\t287 17.4.2 互斥锁\t289 17.4.3 互斥锁实现原理\t290 17.4.4 互斥锁的释放\t294 17.4.5 读写锁\t295 17.4.6 读写锁原理\t296 17.5 总结\t298 第18章 内存分配管理\t299 18.1 Go语言内存分配全局视野\t299 18.1.1 span与元素\t299 18.1.2 三级对象管理\t300 18.1.3 四级内存块管理\t301 18.2 对象分配\t302 18.2.1 微小对象\t302 18.2.2 mcache缓存位图\t304 18.2.3 mcentral遍历span\t305 18.2.4 mheap缓存查找\t307 18.2.5 mheap基数树查找\t307 18.2.6 操作系统内存申请\t311 18.2.7 小对象分配\t311 18.2.8 大对象分配\t312 18.3 总结\t312 第19章 垃圾回收初探\t313 19.1 为什么需要垃圾回收\t314 19.1.1 减少错误和复杂性\t314 19.1.2 解耦\t314 19.2 垃圾回收的5种经典算法\t315 19.2.1 标记-清扫\t315 19.2.2 标记-压缩\t316 19.2.3 半空间复制\t316 19.2.4 引用计数\t317 19.2.5 分代GC\t318 19.3 Go语言中的垃圾回收\t318 19.3.1 为什么不选择压缩GC?\t319 19.3.2 为什么不选择分代GC?\t319 19.4 Go垃圾回收演进\t319 19.5 总结\t321 第20章 深入垃圾回收全流程\t322 20.1 垃圾回收循环\t322 20.2 标记准备阶段\t323 20.2.1 计算标记协程的数量\t323 20.2.2 切换到后台标记协程\t325 20.3 并发标记阶段\t325 20.3.1 根对象扫描\t327 20.3.2 全局变量扫描\t328 20.3.3 finalizer\t330 20.3.4 栈扫描\t331 20.3.5 栈对象\t332 20.3.6 扫描灰色对象\t333 20.4 标记终止阶段\t336 20.5 辅助标记\t339 20.6 屏障技术\t341 20.7 垃圾清扫\t347 20.7.1 懒清扫逻辑\t348 20.7.2 辅助清扫\t349 20.8 系统驻留内存清除\t350 20.9 实战:垃圾回收产生的性能问题\t352 20.10 总结\t354 第21章 调试利器:特征分析与事件追踪\t355 21.1 pprof的使用方式\t355 21.1.1 堆内存特征分析\t357 21.1.2 pprof可视化结果说明\t360 21.1.3 pprof协程栈分析\t361 21.1.4 base基准分析\t362 21.1.5 mutex堵塞分析\t363 21.1.6 CPU占用分析\t363 21.2 火焰图分析\t365 21.3 trace事件追踪\t366 21.3.1 trace工具的用法与说明\t366 21.3.2 trace 分析场景\t369 21.4 pprof底层原理\t370 21.4.1 堆内存样本\t370 21.4.2 协程栈样本收集原理\t372 21.4.3 CPU样本收集原理\t372 21.4.4 pprof分析原理\t375 21.5 trace底层原理\t377 21.6 总结\t379 书评(媒体评论) "这是一本Go语言的初学者和进阶学者都可以受益的书。它不仅仅介绍了Go的语言特性,还深入这些特性背后的设计考量、编译器及语言实现的细节。授人以鱼和授人以渔在本书里面一起得到了体现。更难得的是,本书并没有粘贴大段的代码,而是以图文的形式将复杂的概念解释清楚,降低了阅读和理解的难度,使得读者不会望“底层”和“深入”二词而却步。 ——Shopee技术委员会主席、顺丰速运前CTO、Google前主任工程师 叶绍志博士" |
随便看 |
|
霍普软件下载网电子书栏目提供海量电子书在线免费阅读及下载。