mirror of
https://github.com/chai2010/advanced-go-programming-book.git
synced 2025-05-24 04:22:22 +00:00
调整目录
This commit is contained in:
parent
67897f671d
commit
d53f8574f8
@ -8,7 +8,7 @@
|
|||||||
* [1.5. 面向并发的内存模型](ch1-basic/ch1-05-mem.md)
|
* [1.5. 面向并发的内存模型](ch1-basic/ch1-05-mem.md)
|
||||||
* [1.6. 常见的并发模式](ch1-basic/ch1-06-goroutine.md)
|
* [1.6. 常见的并发模式](ch1-basic/ch1-06-goroutine.md)
|
||||||
* [1.7. 错误和异常](ch1-basic/ch1-07-error-and-panic.md)
|
* [1.7. 错误和异常](ch1-basic/ch1-07-error-and-panic.md)
|
||||||
* [1.8. 配置开发环境](ch1-basic/ch1-08-ide.md)
|
* [1.8. 补充说明](ch1-basic/ch1-08-ext.md)
|
||||||
* [第二章 CGO编程](ch2-cgo/readme.md)
|
* [第二章 CGO编程](ch2-cgo/readme.md)
|
||||||
* [2.1. 快速入门](ch2-cgo/ch2-01-hello-cgo.md)
|
* [2.1. 快速入门](ch2-cgo/ch2-01-hello-cgo.md)
|
||||||
* [2.2. CGO基础](ch2-cgo/ch2-02-basic.md)
|
* [2.2. CGO基础](ch2-cgo/ch2-02-basic.md)
|
||||||
@ -21,7 +21,7 @@
|
|||||||
* [2.9. 静态库和动态库](ch2-cgo/ch2-09-static-shared-lib.md)
|
* [2.9. 静态库和动态库](ch2-cgo/ch2-09-static-shared-lib.md)
|
||||||
* [2.10. Go实现Python模块](ch2-cgo/ch2-10-py-module.md)
|
* [2.10. Go实现Python模块](ch2-cgo/ch2-10-py-module.md)
|
||||||
* [2.11. 编译和链接参数](ch2-cgo/ch2-11-link.md)
|
* [2.11. 编译和链接参数](ch2-cgo/ch2-11-link.md)
|
||||||
* [2.12. 补充说明](ch2-cgo/ch2-12-faq.md)
|
* [2.12. 补充说明](ch2-cgo/ch2-12-ext.md)
|
||||||
* [第三章 汇编语言](ch3-asm/readme.md)
|
* [第三章 汇编语言](ch3-asm/readme.md)
|
||||||
* [3.1. 快速入门](ch3-asm/ch3-01-basic.md)
|
* [3.1. 快速入门](ch3-asm/ch3-01-basic.md)
|
||||||
* [3.2. 计算机结构](ch3-asm/ch3-02-arch.md)
|
* [3.2. 计算机结构](ch3-asm/ch3-02-arch.md)
|
||||||
@ -31,7 +31,7 @@
|
|||||||
* [3.6. 再论函数](ch3-asm/ch3-06-func-again.md)
|
* [3.6. 再论函数](ch3-asm/ch3-06-func-again.md)
|
||||||
* [3.7. 例子:Goroutine ID](ch3-asm/ch3-07-goroutine-id.md)
|
* [3.7. 例子:Goroutine ID](ch3-asm/ch3-07-goroutine-id.md)
|
||||||
* [3.8. Delve调试器](ch3-asm/ch3-08-debug.md)
|
* [3.8. Delve调试器](ch3-asm/ch3-08-debug.md)
|
||||||
* [3.9. 补充说明](ch3-asm/ch3-09-faq.md)
|
* [3.9. 补充说明](ch3-asm/ch3-09-ext.md)
|
||||||
* [第四章 RPC和Protobuf](ch4-rpc/readme.md)
|
* [第四章 RPC和Protobuf](ch4-rpc/readme.md)
|
||||||
* [4.1. RPC入门](ch4-rpc/ch4-01-rpc-intro.md)
|
* [4.1. RPC入门](ch4-rpc/ch4-01-rpc-intro.md)
|
||||||
* [4.2. Protobuf](ch4-rpc/ch4-02-pb-intro.md)
|
* [4.2. Protobuf](ch4-rpc/ch4-02-pb-intro.md)
|
||||||
@ -40,7 +40,7 @@
|
|||||||
* [4.5. GRPC进阶](ch4-rpc/ch4-05-grpc-hack.md)
|
* [4.5. GRPC进阶](ch4-rpc/ch4-05-grpc-hack.md)
|
||||||
* [4.6. GRPC和Protobuf扩展](ch4-rpc/ch4-06-grpc-ext.md)
|
* [4.6. GRPC和Protobuf扩展](ch4-rpc/ch4-06-grpc-ext.md)
|
||||||
* [4.7. pbgo: 基于Protobuf的框架](ch4-rpc/ch4-07-pbgo.md)
|
* [4.7. pbgo: 基于Protobuf的框架](ch4-rpc/ch4-07-pbgo.md)
|
||||||
* [4.8. 补充说明](ch4-rpc/ch4-08-faq.md)
|
* [4.8. 补充说明](ch4-rpc/ch4-08-ext.md)
|
||||||
* [第五章 Go和Web](ch5-web/readme.md)
|
* [第五章 Go和Web](ch5-web/readme.md)
|
||||||
* [5.1. Web开发简介](ch5-web/ch5-01-introduction.md)
|
* [5.1. Web开发简介](ch5-web/ch5-01-introduction.md)
|
||||||
* [5.2. Router请求路由](ch5-web/ch5-02-router.md)
|
* [5.2. Router请求路由](ch5-web/ch5-02-router.md)
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
## 1.8. 扩展阅读
|
## 1.8. 补充说明
|
||||||
|
|
||||||
|
本书定位是Go语言进阶图书,因此读者需要有一定的Go语言基础。如果对Go语言不太了解,作者推荐通过以下资料开始学习Go语言。首先是安装Go语言环境,然后通过`go tool tour`命令打开“A Tour of Go”教程学习。在学习“A Tour of Go”教程的同时,可以阅读Go语言官方团队出版的[《The Go Programming Language》](http://www.gopl.io/)教程。[《The Go Programming Language》](http://www.gopl.io/)在国内Go语言社区被称为Go语言圣经,它将带你系统地学习Go语言。在学习的同时可以尝试用Go语言解决一些小问题,如果遇到要差异API的适合可以通过godoc命令打开自带的文档查询。Go语言本身不仅仅包含了所有的文档,也包含了所有标准库的实现代码,这是第一手的最权威的Go语言资料。我们此时你应该已经可以熟练使用Go语言了。
|
||||||
|
|
||||||
TODO
|
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
## 2.12. 扩展阅读
|
## 2.12. 补充说明
|
||||||
|
|
||||||
|
CGO是C语言和Go语言混合编程的技术,因此要想熟练地使用CGO需要了解这两门语言。C语言推荐两本书:第一本是C语言之父编写的《C程序设计语言》;第二本是讲述C语言模块化编程的《C语言接口与实现:创建可重用软件的技术》。Go语言推荐官方出版的《The Go Programming Language》和Go语言自带的全部文档和全部代码。
|
||||||
|
|
||||||
|
为何要话费巨大的精力学习CGO是一个问题。任何技术和语言都有它自身的优点和不足,Go语言不是银弹,它无法解决全部问题。而通过CGO可以继承C/C++将近半个世纪的软件遗产,通过CGO可以用Go给其它系统写C接口的共享库,通过CGO技术可以让Go语言编写的代码可以很好地融入现有的软件生态——而现在的软件正式建立在C/C++语言之上的。因此说CGO是一个保底的后备技术,它是Go的一个重量级的替补技术,值得任何一个严肃的Go语言开发人员学习。
|
||||||
|
|
||||||
TODO
|
|
||||||
|
@ -1,6 +0,0 @@
|
|||||||
# 2.12. 补充说明
|
|
||||||
|
|
||||||
为何要话费巨大的精力学习CGO是一个问题。任何技术和语言都有它自身的优点和不足,Go语言不是银弹,它无法解决全部问题。而通过CGO可以继承C/C++将近半个世纪的软件遗产,通过CGO可以用Go给其它系统写C接口的共享库,通过CGO技术可以让Go语言编写的代码可以很好地融入现有的软件生态——而现在的软件正式建立在C/C++语言之上的。因此说CGO是一个保底的后备技术,它是Go的一个重量级的替补技术,值得任何一个严肃的Go语言开发人员学习。
|
|
||||||
|
|
||||||
本章讨论了CGO的一些常见用法,并给出相关的例子。关于CGO有几点补充:如果有纯Go的解决方法就不要使用CGO;CGO中涉及的C和C++构建问题非常繁琐;CGO有一定的限制无法实现解决全部的问题;不要试图越过CGO的一些限制。而且CGO只是一种官方提供并推荐的Go语言和C/C++交互的方法。如果是使用的gccgo的版本,可以通过gccgo的方式实现Go和C/C++的交互。同时SWIG也是一种选择,并对C++诸多特性提供了支持。
|
|
||||||
|
|
@ -1,3 +1,10 @@
|
|||||||
## 3.9. 扩展阅读
|
## 3.9. 补充说明
|
||||||
|
|
||||||
|
如果是纯粹学习汇编语言,则可以从《深入理解程序设计:使用Linux汇编语言》开始,该书讲述了如何以C语言的思维变现汇编程序。如果是学习X86汇编,则可以从《汇编语言:基于x86处理器》一开始,然后再结合《现代x86汇编语言程序设计》学习AVX等高级汇编指令的使用。
|
||||||
|
|
||||||
|
Go汇编语言的官方文档非常匮乏。其中“A Quick Guide to Go's Assembler”是唯一的一篇系统讲述Go汇编语言的官方文章,该文章中又引入了另外两篇Plan9的文档:A Manual for the Plan 9 assembler 和 Plan 9 C Compilers。Plan9的两篇文档分别讲述了汇编语言以及和汇编有关联的C语言编译器的细节。看过这几篇文档之后会对Go汇编语言有了一些模糊的概念,剩下的就是在实战中通过代码学习了。
|
||||||
|
|
||||||
|
Go语言的编译器和汇编器都带了一个`-S`参数,可以查看生成的最终目标代码。通过对比目标代码和原始的Go语言或Go汇编语言代码的差异可以加深对底层实现的理解。同时Go语言连接器的实现代码也包含了很多相关的信息。Go汇编语言是依托Go语言的语言,因此理解Go语言的工作原理是也是必要的。比较重要的部分是Go语言runtime和reflect包的实现原理。如果读者了解CGO技术,那么对Go汇编语言的学习也是一个巨大的帮助。最后是要了解syscall包是如何实现系统调用的。
|
||||||
|
|
||||||
|
得益于Go语言的设计,Go汇编语言的优势也非常明显:跨操作系统、不同CPU之间的用法也非常相似、支持C语言预处理器、支持模块。同时Go汇编语言也存在很多不足:它不是一个独立的语言,底层需要依赖Go语言甚至操作系统;很多高级特性很难通过手工汇编完成。虽然Go语言官方尽量保持Go汇编语言简单,但是汇编语言是一个比较大的话题,大到足以写一本Go汇编语言的教程。本章的目的是让大家对Go汇编语言简单入门,在看到底层汇编代码的时候不会一头雾水,在某些遇到性能受限制的场合能够通过Go汇编突破限制。
|
||||||
|
|
||||||
TODO
|
|
||||||
|
@ -1,14 +0,0 @@
|
|||||||
# 3.9. 补充说明
|
|
||||||
|
|
||||||
得益于Go语言的设计,Go汇编语言的优势也非常明显:跨操作系统、不同CPU之间的用法也非常相似、支持C语言预处理器、支持模块。同时Go汇编语言也存在很多不足:它不是一个独立的语言,底层需要依赖Go语言甚至操作系统;很多高级特性很难通过手工汇编完成。虽然Go语言官方尽量保持Go汇编语言简单,但是汇编语言是一个比较大的话题,大到足以写一本Go汇编语言的教程。本章的目的是让大家对Go汇编语言简单入门,在看到底层汇编代码的时候不会一头雾水,在某些遇到性能受限制的场合能够通过Go汇编突破限制。这只是一个开始,后续版本会继续完善。
|
|
||||||
|
|
||||||
<!--
|
|
||||||
未解的问题:
|
|
||||||
defer/go 工作原理
|
|
||||||
闭包掉工作原理
|
|
||||||
接口结构和原理
|
|
||||||
通过接口调用方法
|
|
||||||
AVX512指令集
|
|
||||||
JIT动态生成代码
|
|
||||||
直接调用C函数(假设栈足够)
|
|
||||||
-->
|
|
@ -1,3 +1,5 @@
|
|||||||
## 4.8. 扩展阅读
|
## 4.8. 补充说明
|
||||||
|
|
||||||
|
目前专门讲述RPC的图书比较少。目前Protobuf和GRPC的官网都提供了详细的参考资料和例子。本章重点讲述了Go标准库的RPC和基于Protobuf衍生的GRPC框架,同时也简单展示了如何自己定制一个RPC框架。之所以聚焦在这几个有限的主题,是因为这几个技术都是Go语言团队官方在进行维护,和Go语言契合也最为默契。不过RPC依然是一个庞大的主题,足以单独成书。目前开源世界也有很多富有特色的RPC框架,还有针对分布式系统进行深度定制的RPC系统,用户可以根据自己实际需求选择合适的工具。
|
||||||
|
|
||||||
|
|
||||||
TODO
|
|
||||||
|
@ -1,5 +0,0 @@
|
|||||||
# 4.8. 补充说明
|
|
||||||
|
|
||||||
本章重点讲述了Go标准库的RPC和基于Protobuf衍生的GRPC框架,同时也简单展示了如何自己定制一个RPC框架。之所以聚焦在这几个有限的主题,是因为这几个技术都是Go语言团队官方在进行维护,和Go语言契合也最为默契。不过RPC依然是一个庞大的主题,足以单独成书。目前开源世界也有很多富有特色的RPC框架,还有针对分布式系统进行深度定制的RPC系统,用户可以根据自己实际需求选择合适的工具。
|
|
||||||
|
|
||||||
<!-- Nginx 补充说明 -->
|
|
Loading…
x
Reference in New Issue
Block a user