• Go语言精进之路:从新手高的编程思想、方法和技巧2
  • Go语言精进之路:从新手高的编程思想、方法和技巧2
21年品牌 40万+商家 超1.5亿件商品

Go语言精进之路:从新手高的编程思想、方法和技巧2

89.25 7.5折 119 全新

库存5件

浙江嘉兴
认证卖家担保交易快速发货售后保障

作者白明 著

出版社机械工业出版社

ISBN9787111698227

出版时间2022-01

装帧平装

开本16开

定价119元

货号31338961

上书时间2024-11-21

晨雨图书店121

四年老店
已实名 已认证 进店 收藏店铺

   商品详情   

品相描述:全新
商品描述
作者简介
作者简介<br>白明(TonyBai)<br>资深Go技术专家和架构师,有超过10年的服务端架构设计和开发经验,擅长服务器后端编程。曾任东软集团开发部技术总监和东网科技高级架构师,现为东软睿驰智能网联汽车业务线精通车联网平台的高级架构师。精通Go、C、Python、Shell、Linux、Rancher、Docker、OpenStack、Kubernetes等技术栈。<br>《七周七语言》译者之一,GopherChina大会、开源中国源创会讲师,麦思博客座培训师,tonybai.com技术博客博主。

目录
推荐序<br/>前言<br/>第一部分 熟知Go语言的一切<br/>第1条 了解Go语言的诞生与演进<br/>1.1 Go语言的诞生<br/>1.2 Go语言的早期团队和演进历程<br/>1.3 Go语言正式发布并开源<br/>第2条 选择适当的Go语言版本<br/>2.1 Go语言的先祖<br/>2.2 Go语言的版本发布历史<br/>2.3 Go语言的版本选择建议<br/>第3条 理解Go语言的设计哲学<br/>3.1 追求简单,少即是多<br/>3.2 偏好组合,正交解耦<br/>3.3 原生并发,轻量高效<br/>3.4 面向工程,“自带电池”<br/>第4条 使用Go语言原生编程思维来写Go代码<br/>4.1 语言与思维—来自大师的观点<br/>4.2 现实中的“投影”<br/>4.3 Go语言原生编程思维<br/>第二部分 项目结构、代码风格与标识符命名<br/>第5条 使用得到公认且广泛使用的项目结构<br/>5.1 Go项目的项目结构<br/>5.2 Go语言典型项目结构<br/>第6条 提交前使用gofmt格式化源码<br/>6.1 gofmt:Go语言在解决规模化问题上的最佳实践<br/>6.2 使用gofmt<br/>6.3 使用goimports<br/>6.4 将gofmt/goimports与IDE或编辑器工具集成<br/>第7条 使用Go命名惯例对标识符进行命名<br/>7.1 简单且一致<br/>7.2 利用上下文环境,让最短的名字<br/>   携带足够多的信息<br/>第三部分 声明、类型、语句与<br/>控制结构<br/>第8条 使用一致的变量声明形式<br/>8.1 包级变量的声明形式<br/>8.2 局部变量的声明形式<br/>第9条 使用无类型常量简化代码<br/>9.1 Go常量溯源<br/>9.2 有类型常量带来的烦恼<br/>9.3 无类型常量消除烦恼,简化代码<br/>第10条 使用iota实现枚举常量<br/>第11条 尽量定义零值可用的类型<br/>11.1 Go类型的零值<br/>11.2 零值可用<br/>第12条 使用复合字面值作为初值构造器<br/>12.1 结构体复合字面值<br/>12.2 数组/切片复合字面值<br/>12.3 map复合字面值<br/>第13条 了解切片实现原理并高效使用<br/>13.1 切片究竟是什么<br/>13.2 切片的高级特性:动态扩容<br/>13.3 尽量使用cap参数创建切片<br/>第14条 了解map实现原理并高效使用<br/>14.1 什么是map<br/>14.2 map的基本操作<br/>14.3 map的内部实现<br/>14.4 尽量使用cap参数创建map<br/>第15条 了解string实现原理并高效使用<br/>15.1 Go语言的字符串类型<br/>15.2 字符串的内部表示<br/>15.3 字符串的高效构造<br/>15.4 字符串相关的高效转换<br/>第16条 理解Go语言的包导入<br/>16.1 Go程序构建过程<br/>16.2 究竟是路径名还是包名<br/>16.3 包名冲突问题<br/>第17条 理解Go语言表达式的求值顺序<br/>17.1 包级别变量声明语句中的表达式求值顺序<br/>17.2 普通求值顺序<br/>17.3 赋值语句的求值<br/>17.4 switch/select语句中的表达式求值<br/>第18条 理解Go语言代码块与作用域<br/>18.1 Go代码块与作用域简介<br/>18.2 if条件控制语句的代码块<br/>18.3 其他控制语句的代码块规则简介<br/>第19条 了解Go语言控制语句惯用法及使用注意事项<br/>19.1 使用if控制语句时应遵循“快乐路径”原则<br/>19.2 for range的避“坑”指南<br/>19.3 break跳到哪里去了<br/>19.4 尽量用case表达式列表替代fallthrough<br/>第四部分 函数与方法<br/>第20条 在init函数中检查包级变量的初始状态<br/>20.1 认识init函数<br/>20.2 程序初始化顺序<br/>20.3 使用init函数检查包级变量的初始状态<br/>第21条 让自己习惯于函数是“一等公民”<br/>21.1 什么是“一等公民”<br/>21.2 函数作为“一等公民”的特殊运用<br/>第22条 使用defer让函数更简洁、更健壮<br/>22.1 defer的运作机制<br/>22.2 defer的常见用法<br/>22.3 关于defer的几个关键问题<br/>第23条 理解方法的本质以选择正确的receiver类型<br/>23.1 方法的本质<br/>23.2 选择正确的receiver类型<br/>23.3 基于对Go方法本质的理解巧解难题<br/>第24条 方法集合决定接口实现<br/>24.1 方法集合<br/>24.2 类型嵌入与方法集合<br/>24.3 defined类型的方法集合<br/>24.4 类型别名的方法集合<br/>第25条 了解变长参数函数的妙用<br/>25.1 什么是变长参数函数<br/>25.2 模拟函数重载<br/>25.3 模拟实现函数的可选参数与默认参数<br/>25.4 实现功能选项模式<br/>第五部分 接口<br/>第26条 了解接口类型变量的内部表示<br/>26.1 nil error值 != nil<br/>26.2 接口类型变量的内部表示<br/>26.3 输出接口类型变量内部表示的详细信息<br/>26.4 接口类型的装箱原理<br/>第27条 尽量定义小接口<br/>27.1 Go推荐定义小接口<br/>27.2 小接口的优势<br/>27.3 定义小接口可以遵循的一些点<br/>第28条 尽量避免使用空接口作为函数参数类型<br/>第29条 使用接口作为程序水平组合的连接点<br/>29.1 一切皆组合<br/>29.2 垂直组合回顾<br/>29.3 以接口为连接点的水平组合<br/>第30条 使用接口提高代码的可测试性<br/>30.1 实现一个附加免责声明的电子邮件发送函数<br/>30.2 使用接口来降低耦合<br/>第六部分 并发编程<br/>第31条 优先考虑并发设计<br/>31.1 并发与并行<br/>31.2 Go并发设计实例<br/>第32条 了解goroutine的调度原理<br/>32.1 goroutine调度器<br/>32.2 goroutine调度模型与演进过程<br/>32.3 对goroutine调度器原理的进一步理解<br/>32.4 调度器状态的查看方法<br/>32.5 goroutine调度实例简要分析<br/>第33条 掌握Go并发模型和常见并发模式<br/>33.1 Go并发模型<br/>33.2 Go常见的并发模式<br/>第34条 了解channel的妙用<br/>34.1 无缓冲channel<br/>34.2 带缓冲channel<br/>34.3 nil channel的妙用<br/>34.4 与select结合使用的一些惯用法<br/>第35条 了解sync包的正确用法<br/>35.1 sync包还是channel<br/>35.2 使用sync包的注意事项<br/>35.3 互斥锁还是读写锁<br/>35.4 条件变量<br/>35.5 使用sync.Once实现单例模式<br/>35.6 使用sync.Pool减轻垃圾回收压力<br/>第36条 使用atomic包实现伸缩性更好的并发读取<br/>36.1 atomic包与原子操作<br/>36.2 对共享整型变量的无锁读写<br/>36.3 对共享自定义类型变量的无锁读写<br/>第七部分 错误处理<br/>第37条 了解错误处理的4种策略<br/>37.1 构造错误值<br/>37.2 透明错误处理策略<br/>37.3 “哨兵”错误处理策略<br/>37.4 错误值类型检视策略<br/>37.5 错误行为特征检视策略<br/>第38条 尽量优化反复出现的if err != nil<br/>38.1 两种观点<br/>38.2 尽量优化<br/>38.3 优化思路<br/>第39条 不要使用panic进行正常的错误处理<br/>39.1 Go的panic不是Java的checked exception<br/>39.2 panic的典型应用<br/>39.3 理解panic的输出信息<br/>(以上为第1册内容,以下为本书内容。)<br/>第八部分 测试、性能剖析与调试<br/>第40条 理解包内测试与包外测试的差别2<br/>40.1 官方文档的“自相矛盾”2<br/>40.2 包内测试与包外测试3<br/>第41条 有层次地组织测试代码9<br/>41.1 经典模式—平铺9<br/>41.2 xUnit家族模式10<br/>41.3 测试固件13<br/>第42条 优先编写表驱动的测试20<br/>42.1 Go测试代码的一般逻辑20<br/>42.2 表驱动的测试实践21<br/>42.3 表驱动测试的优点22<br/>42.4 表驱动测试实践中的注意事项23<br/>第43条 使用testdata管理测试依赖的外部数据文件28<br/>43.1 testdata目录28<br/>43.2 golden文件惯用法32<br/>第44条 正确运用fake、stub和mock等辅助单元测试35<br/>44.1 fake:真实组件或服务的简化实现版替身36<br/>44.2 stub:对返回结果有一定预设控制能力的替身39<br/>44.3 mock:专用于行为观察和验证的替身44<br/>第45条 使用模糊测试让潜在bug无处遁形48<br/>45.1 模糊测试在挖掘Go代码的潜在bug中的作用49<br/>45.2 go-fuzz的初步工作原理49<br/>45.3 go-fuzz使用方法51<br/>45.4 使用go-fuzz建立模糊测试的示例54<br/>45.5 让模糊测试成为“一等公民”58<br/>第46条 为被测对象建立性能基准60<br/>46.1 性能基准测试在Go语言中是“一等公民”60<br/>46.2 顺序执行和并行执行的性能基准测试62<br/>46.3 使用性能基准比较工具69<br/>46.4 排除额外干扰,让基准测试更精确72<br/>第47条 使用pprof对程序进行性能剖析76<br/>47.1 pprof的工作原理76<br/>47.2 使用pprof进行性能剖析的实例90<br/>第48条 使用expvar输出度量数据,辅助定位性能瓶颈点101<br/>48.1 expvar包的工作原理102<br/>48.2 自定义应用通过expvar输出的度量数据105<br/>48.3 输出数据的展示110<br/>第49条 使用Delve调试Go代码112<br/>49.1 关于调试,你首先应该知道的几件事112<br/>49.2 Go调试工具的选择114<br/>49.3 Delve调试基础、原理与架构116<br/>49.4 并发、Coredump文件与挂接进程调试125<br/>第九部分 标准库、反射与cgo<br/>第50条 理解Go TCP Socket网络编程模型136<br/>50.1 TCP Socket网络编程模型137<br/>50.2 TCP连接的建立142<br/>50.3 Socket读写145<br/>50.4 Socket属性155<br/>50.5 关闭连接156<br/>第51条 使用net/http包实现安全通信158<br/>51.1 HTTPS:在安全传输层上运行的HTTP协议158<br/>51.2 HTTPS安全传输层的工作机制161<br/>51.3 非对称加密和公钥证书164<br/>51.4 对服务端公钥证书的校验169<br/>51.5 对客户端公钥证书的校验172<br/>第52条 掌握字符集的原理和字符编码方案间的转换175<br/>52.1 字符与字符集175<br/>52.2 Unicode字符集的诞生与UTF-8编码方案177<br/>52.3 字符编码方案间的转换179<br/>第53条 掌握使用time包的正确方式187<br/>53.1 时间的基础操作187<br/>53.2 时间的格式化输出196<br/>53.3 定时器的使用199<br/>第54条 不要忽略对系统信号的处理209<br/>54.1 为什么不能忽略对系统信号的处理209<br/>54.2 Go语言对系统信号处理的支持210<br/>54.3 使用系统信号实现程序的优雅退出216<br/>第55条 使用crypto下的密码学包构建安全应用219<br/>55.1 Go密码学包概览与设计原则219<br/>55.2 分组密码算法221<br/>55.3 公钥密码228<br/>55.4 单向散列函数231<br/>55.5 消息认证码233<br/>55.6 数字签名235<br/>55.7 随机数生成238<br/>第56条 掌握bytes包和strings包的基本操作240<br/>56.1 查找与替换241<br/>56.2 比较244<br/>56.3 分割246<br/>56.4 拼接248<br/>56.5 修剪与变换249<br/>56.6 快速对接I/O模型252<br/>第57条 理解标准库的读写模型254<br/>57.1 直接读写字节序列255<br/>57.2 直接读写抽象数据类型实例257<br/>57.3 通过包裹类型读写数据263<br/>第58条 掌握unsafe包的安全使用模式269<br/>58.1 简洁的unsafe包 270<br/>58.2 unsafe包的典型应用273<br/>58.3 正确理解unsafe.Pointer与uintptr277<br/>58.4 unsafe.Pointer的安全使用模式280<br/>第59条 谨慎使用reflect包提供的反射能力288<br/>59.1 Go反射的三大法则288<br/>59.2 反射世界的入口291<br/>59.3 反射世界的出口295<br/>59.4 输出参数、interface{}类型变量及反射对象的可设置性295<br/>第60条 了解cgo的原理和使用开销300<br/>60.1 Go调用C代码的原理300<br/>60.2 在Go中使用C语言的类型302<br/>60.3 在Go中链接外部C库307<br/>60.4 在C中使用Go函数309<br/>60.5 使用cgo的开销309<br/>60.6 使用cgo代码的静态构建314<br/>第十部分 工具链与工程实践<br/>第61条 使用module管理包依赖320<br/>61.1 Go语言包管理演进回顾320<br/>61.2 Go module:Go包依赖管理的生产标准324<br/>61.3 Go module代理339<br/>61.4 升级module的主版本号342<br/>第62条 构建最小Go程序容器镜像350<br/>62.1 镜像:继承中的创新350<br/>62.2 “镜像是个筐”:初学者的认知351<br/>62.3 理性回归:builder模式的崛起353<br/>62.4 “像赛车那样减重”:追求最小镜像355<br/>62.5 “要有光”:对多阶段构建的支持357<br/>第63条 自定义Go包的导入路径359<br/>63.1 govanityurls360<br/>63.2 使用govanityurls361<br/>第64条 熟练掌握Go常用工具367<br/>64.1 获取与安装367<br/>64.2 包或module检视373<br/>64.3 构建380<br/>64.4 运行与诊断390<br/>64.5 格式化与静态代码检查398<br/>64.6 重构4

—  没有更多了  —

以下为对购买帮助不大的评价

此功能需要访问孔网APP才能使用
暂时不用
打开孔网APP