Go语言底层原理剖析

价格 99.00对比
发货 广东东莞市
销量 暂无
评价 已有 0 条评价
人气 已有 5 人关注
数量
+-
库存100
 
联系方式
加关注0

博文图书网

管理员第1年
资料通过认证
保证金未缴纳

内容简介

Go语言是一门年轻、简捷,但是强大、、充满潜力的服务器语言。本书使用浅显易懂的语言与大量图片深入介绍了Go语言编译时、类型系统、语法特、函数调用规范、并发编程、内存管理与垃圾回收、运行状态监控等模块的使用方法和底层原理,并举例说明了构建大型软件工程需要遵循的设计规则,让作者系统并完整掌握Go语言隐藏在使用方法背后的底层细节。 本书适合有工作经验的开发工程一步提升自己,以便更好地开发软件、系统架构,行工作面试。也可以作为高等院校计算机专业师生学语言设计原理的参考教材。

目录

目录第1章 深入Go语言编译器 11.1 为什么要了解Go语言编译器 11.2 Go语言编译器的阶段 11.3 词法解析 31.4 语法解析 41.5 抽象语法树构建 61.6 类型检查 81.7 变量捕获 81.8 函数内联 91.9 逃逸分析 121.10 重写 141.11 遍历函数 151.12 SSA生成 151.13 机器码生成――汇编器 181.14 机器码生成――链接 201.15 ELF文件解析 231.16 结 26第2章 浮点数设计原理与使用方法 272.1 浮点数陷阱 272.2 定点数与浮点数 272.3 IEEE-754浮点数标准 282.3.1 小数部分计算 292.3.2 显示浮点数格式 302.4 佳实践:判断浮点数为整数 312.5 常规数与规数 332.6 NaN与Inf 332.7 浮点数精度 342.8 浮点数与格式化打印 362.9 浮点数计算与精度损失 372.10 多精度浮点数与math/big库 382.11 结 41第3章 类型推断全解析 423.1 类型推断的优势 423.2 Go语言中类型推断的特 433.3 类型推断原理 443.3.1 词法解析与语法分析阶段 443.3.2 抽象语法树生成与类型检查 463.4 结 48第4章 常量与隐式类型转换 494.1 常量声明与生存周期 494.2 常量类型转换 504.2.1 隐式整数转换 504.2.2 隐式浮点数转换 514.2.3 常量运算中的隐式转换 514.2.4 常量与变量之间的转换 514.2.5 自定义类型的转换 524.3 常量与隐式类型转换原理 534.4 结 55第5章 字符串本质与实现 565.1 字符串的本质 565.2 符文类型 575.3 字符串工具函数 585.4 字符串底层原理 595.4.1 字符串解析 595.4.2 字符串拼接 615.4.3 运行时字符拼接 625.4.4 字符串与字节数组的转换 645.5 结 66第6章 数组 676.1 数组的声明方式 676.2 数组值 686.3 数组底层原理 686.3.1 编译时数组解析 686.3.2 数组字面量初始化原理 696.3.3 数组字面量编译时内存优化 706.3.4 数组索引与访问越界原理 706.4 结 73第7章 切片使用方法与底层原理 747.1 切片使用方法 747.1.1 切片的结构 747.1.2 切片的初始化 757.1.3 切片的截取 757.1.4 切片值与数据引用 767.1.5 切片收缩与扩容 777.2 切片底层原理 787.2.1 字面量初始化 787.2.2 make初始化 797.2.3 切片扩容原理 807.2.4 切片截取原理 827.2.5 切片的完整 837.3 结 84第8章 哈希表与Go实现机制 858.1 哈希碰撞与解决方法 858.2 map基本操作 878.2.1 map声明与初始化 878.2.2 map访问 878.2.3 map赋值 888.2.4 key的比较 888.2.5 map并发冲突 898.3 哈希表底层结构 898.4 哈希表原理图解 918.5 深入哈希表原理 948.5.1 make初始化原理 948.5.2 字面量初始化原理 968.5.3 map访问原理 978.5.4 map赋值操作原理 998.5.5 map重建原理 1028.5.6 map删除原理 1038.6 结 104第9章 函数与栈 1059.1 函数基本使用方式 1059.2 函数与陷阱 1069.3 函数栈 1079.4 Go语言栈帧结构 1089.5 Go语言函数调用链结构与特 1109.6 堆栈信息 1119.7 栈扩容与栈转移原理 1139.8 栈调试 1189.9 结 120第10章 defer延迟调用 12110.1 使用的defer的优势 12210.1.1 资源释放 12210.1.2 异常捕获 12310.2 defer特 12510.2.1 延迟执行 12510.2.2 参数预计算 12610.2.3 defer多次执行与LIFO执行顺序 12710.3 defer返回值陷阱 12710.4 defer底层原理 12910.4.1 defer 12910.4.2 堆分配 13010.4.3 defer遍历调用 13410.4.4 Go 1.13栈分配优化 13710.4.5 Go 1.14内联优化 13810.5 结 140第11章 异常与异常捕获 14111.1 panic函数使用方法 14111.2 异常捕获与recover 14211.3 panic与recover嵌套 14411.4 panic函数底层原理 14511.5 recover底层原理 14911.6 结 152第12章 接口与程序设计模式 15412.1 接口的用途 15412.2 Go语言中的接口 15512.3 Go接口实践 15612.4 Go接口的使用方法 15812.4.1 Go接口的声明与定义 15812.4.2 接口实现 15912.4.3 接口动态类型 16012.4.4 接口的动态调用 16112.4.5 多接口 16212.4.6 接口的组合 16212.4.7 接口类型断言 16312.4.8 空接口 16412.4.9 接口的比较 16612.5 接口底层原理 16612.5.1 接口实现算法 16612.5.2 接口组成 16812.5.3 接口内存逃逸分析 17112.5.4 接口动态调用过程 17312.5.5 接口动态调用过程的效率评价 17712.5.6 接口转换 18212.5.7 空接口组成 18412.5.8 空接口switch 18712.5.9 接口的陷阱 18912.6 结 191第13章 反射编程 19213.1 为什么需要反射 19313.2 反射的基本使用方法 19513.2.1 反射的两种基本类型 19513.2.2 反射转换为接口 19613.2.3 Elem()间接访问 19713.2.4 修改反射的值 19913.2.5 结构体与反射 20013.2.6 遍历结构体字段 20013.2.7 修改结构体字段 20113.2.8 嵌套结构体的赋值 20213.2.9 结构体方法与动态调用 20313.2.10 反射在运行时创建结构体 20513.2.11 函数与反射 20613.2.12 反射与其他类型 20613.3 反射底层原理 20713.3.1 reflect.Type详解 20713.3.2 Interface方法原理 20913.3.3 Int方法原理 21113.3.4 Elem方法释疑 21113.3.5 动态调用剖析 21313.4 结 216第14章 协程初探 21714.1 程与线程 21714.2 线程上下文切换 21914.3 线程与协程 22014.3.1 调度方式 22014.3.2 上下文切换的速度 22014.3.3 调度策略 22114.3.4 栈的大小 22114.4 并发与并行 22114.5 简单协程入门 22214.6 main协程与子协程 22314.7 GMP模型 22514.8 结 226第15章 深入协程设计与调度原理 22715.1 协程的生命周期与状态转移 22715.2 特殊协程g0与协程切换 22815.3 线程本地存储与线程绑定 23015.4 调度循环 23115.5 调度策略 23215.5.1 获取本地运行队列 23415.5.2 获取全局运行队列 23515.5.3 获取准备绪的网络协程 23615.5.4 协程窃取 23715.6 调度时机 23815.6.1 主动调度 23815.6.2 被动调度 23915.6.3 抢占调度 24115.6.4 执行时间过长的抢占调度 24115.7 结 247第16章 通道与协程间通信 24816.1 CSP并发编程 24816.2 通道基本使用方式 24916.2.1 通道声明与初始化 24916.2.2 channel写入数据 25016.2.3 通道读取数据 25016.2.4 通道关闭 25016.2.5 通道作为参数和返回值 25216.2.6 单方向通道 25316.2.7 通道佳实践 25416.3 select多路复用 25816.3.elect选择机制 25816.3.2 select堵塞与控制 25916.3.3 循环select 26016.3.4 select 与nil 26116.4 通道底层原理 26116.4.1 通道结构与环形队列 26116.4.2 通道初始化 26316.4.3 通道写入原理 26316.4.4 通道读取原理 26516.5 select底层原理 26716.5.elect一轮循环 26916.5.2 select二轮循环 27016.6 结 271第17章 并发控制 27217.1 context 27217.1.1 为什么需要Context 27217.1.2 Context使用方式 27417.2 context原理 27717.3 数据争用检查 28017.3.1 什么是数据争用 28017.3.2 数据争用检查详解 28217.3.3 race工具原理 28217.4 锁 28617.4.1 原子锁 28717.4.2 互斥锁 28917.4.3 互斥锁实现原理 29017.4.4 互斥锁的释放 29417.4.5 读写锁 29517.4.6 读写锁原理 29617.5 结 298第18章 内存分配管理 29918.1 Go语言内存分配全局视野 29918.1.pan与元素 29918.1.2 三级对象管理 30018.1.3 四级内存块管理 30118.2 对象分配 30218.2.1 微小对象 30218.2.2 mcache缓存位图 30418.2.3 mcentral遍历span 30518.2.4 mheap缓存查找 30718.2.5 mheap基数树查找 30718.2.6 操作系统内存申请 31118.2.7 小对象分配 31118.2.8 大对象分配 31218.3 结 312第19章 垃圾回收初探 31319.1 为什么需要垃圾回收 31419.1.1 减少错误和复杂 31419.1.2 解耦 31419.2 垃圾回收的5种经典算法 31519.2.1 标记-清扫 31519.2.2 标记-压缩 31619.2.3 半空间 31619.2.4 引用计数 31719.2.5 分代GC 31819.3 Go语言中的垃圾回收 31819.3.1 为什么不选择压缩GC? 31919.3.2 为什么不选择分代GC? 31919.4 Go垃圾回收 31919.5 结 321第20章 深入垃圾回收全流程 32220.1 垃圾回收循环 32220.2 标记准备阶段 32320.2.1 计算标记协程的数量 32320.2.2 切换到后台标记协程 32520.3 并发标记阶段 32520.3.1 根对象扫描 32720.3.2 全局变量扫描 32820.3.3 finalizer 33020.3.4 栈扫描 33120.3.5 栈对象 33220.3.6 扫描灰色对象 33320.4 标记终止阶段 33620.5 辅助标记 33920.6 屏障技术 34120.7 垃圾清扫 34720.7.1 懒清扫逻辑 34820.7.2 辅助清扫 34920.8 系统驻留内存清除 35020.9 实战:垃圾回收产生的能问题 35220.10 结 354第21章 调试利器:特征分析与事件追踪 35521.1 pprof的使用方式 35521.1.1 堆内存特征分析 35721.1.2 pprof可视化结果说明 36021.1.3 pprof协程栈分析 36121.1.4 base基准分析 36221.1.5 mutex堵塞分析 36321.1.6 CPU占用分析 36321.2 火焰图分析 36521.3 trace事件追踪 36621.3.1 trace工具的用法与说明 36621.3.2 trace 分析场景 36921.4 pprof底层原理 37021.4.1 堆内存样本 37021.4.2 协程栈样本收集原理 37221.4.3 CPU样本收集原理 37221.4.4 pprof分析原理 37521.5 trace底层原理 37721.6 结 379

举报收藏 0
网站首页  |  关于我们  |  联系方式  |  用户协议  |  隐私政策  |  版权声明  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  粤ICP备2021111040号