diff --git a/SUMMARY.md b/SUMMARY.md index 2a65931..fe8bc25 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -8,7 +8,7 @@ * [1.5. 面向并发的内存模型](ch1-basic/ch1-05-mem.md) * [1.6. 常见的并发模式](ch1-basic/ch1-06-goroutine.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) * [2.1. 快速入门](ch2-cgo/ch2-01-hello-cgo.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.10. Go实现Python模块](ch2-cgo/ch2-10-py-module.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) * [3.1. 快速入门](ch3-asm/ch3-01-basic.md) * [3.2. 计算机结构](ch3-asm/ch3-02-arch.md) @@ -31,7 +31,7 @@ * [3.6. 再论函数](ch3-asm/ch3-06-func-again.md) * [3.7. 例子:Goroutine ID](ch3-asm/ch3-07-goroutine-id.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) * [4.1. RPC入门](ch4-rpc/ch4-01-rpc-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.6. GRPC和Protobuf扩展](ch4-rpc/ch4-06-grpc-ext.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) * [5.1. Web开发简介](ch5-web/ch5-01-introduction.md) * [5.2. Router请求路由](ch5-web/ch5-02-router.md) diff --git a/ch1-basic/ch1-08-ext.md b/ch1-basic/ch1-08-ext.md index d6946b0..48b69d8 100644 --- a/ch1-basic/ch1-08-ext.md +++ b/ch1-basic/ch1-08-ext.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 diff --git a/ch2-cgo/ch2-12-ext.md b/ch2-cgo/ch2-12-ext.md index 66726df..a3f275d 100644 --- a/ch2-cgo/ch2-12-ext.md +++ b/ch2-cgo/ch2-12-ext.md @@ -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 diff --git a/ch2-cgo/ch2-12-faq.md b/ch2-cgo/ch2-12-faq.md deleted file mode 100644 index 09b885b..0000000 --- a/ch2-cgo/ch2-12-faq.md +++ /dev/null @@ -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++诸多特性提供了支持。 - diff --git a/ch3-asm/ch3-09-ext.md b/ch3-asm/ch3-09-ext.md index 5133134..94cc942 100644 --- a/ch3-asm/ch3-09-ext.md +++ b/ch3-asm/ch3-09-ext.md @@ -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 diff --git a/ch3-asm/ch3-09-faq.md b/ch3-asm/ch3-09-faq.md deleted file mode 100644 index d9ffb04..0000000 --- a/ch3-asm/ch3-09-faq.md +++ /dev/null @@ -1,14 +0,0 @@ -# 3.9. 补充说明 - -得益于Go语言的设计,Go汇编语言的优势也非常明显:跨操作系统、不同CPU之间的用法也非常相似、支持C语言预处理器、支持模块。同时Go汇编语言也存在很多不足:它不是一个独立的语言,底层需要依赖Go语言甚至操作系统;很多高级特性很难通过手工汇编完成。虽然Go语言官方尽量保持Go汇编语言简单,但是汇编语言是一个比较大的话题,大到足以写一本Go汇编语言的教程。本章的目的是让大家对Go汇编语言简单入门,在看到底层汇编代码的时候不会一头雾水,在某些遇到性能受限制的场合能够通过Go汇编突破限制。这只是一个开始,后续版本会继续完善。 - - diff --git a/ch4-rpc/ch4-08-ext.md b/ch4-rpc/ch4-08-ext.md index db1a6e0..3e1b746 100644 --- a/ch4-rpc/ch4-08-ext.md +++ b/ch4-rpc/ch4-08-ext.md @@ -1,3 +1,5 @@ -## 4.8. 扩展阅读 +## 4.8. 补充说明 + +目前专门讲述RPC的图书比较少。目前Protobuf和GRPC的官网都提供了详细的参考资料和例子。本章重点讲述了Go标准库的RPC和基于Protobuf衍生的GRPC框架,同时也简单展示了如何自己定制一个RPC框架。之所以聚焦在这几个有限的主题,是因为这几个技术都是Go语言团队官方在进行维护,和Go语言契合也最为默契。不过RPC依然是一个庞大的主题,足以单独成书。目前开源世界也有很多富有特色的RPC框架,还有针对分布式系统进行深度定制的RPC系统,用户可以根据自己实际需求选择合适的工具。 + -TODO diff --git a/ch4-rpc/ch4-08-faq.md b/ch4-rpc/ch4-08-faq.md deleted file mode 100644 index 9823fee..0000000 --- a/ch4-rpc/ch4-08-faq.md +++ /dev/null @@ -1,5 +0,0 @@ -# 4.8. 补充说明 - -本章重点讲述了Go标准库的RPC和基于Protobuf衍生的GRPC框架,同时也简单展示了如何自己定制一个RPC框架。之所以聚焦在这几个有限的主题,是因为这几个技术都是Go语言团队官方在进行维护,和Go语言契合也最为默契。不过RPC依然是一个庞大的主题,足以单独成书。目前开源世界也有很多富有特色的RPC框架,还有针对分布式系统进行深度定制的RPC系统,用户可以根据自己实际需求选择合适的工具。 - - diff --git a/ch1-basic/ch1-08-ide.md b/draft/ch1-08-ide.md similarity index 100% rename from ch1-basic/ch1-08-ide.md rename to draft/ch1-08-ide.md diff --git a/ch2-cgo/ch2-xx-go-get-friendly.md b/draft/ch2-xx-go-get-friendly.md similarity index 100% rename from ch2-cgo/ch2-xx-go-get-friendly.md rename to draft/ch2-xx-go-get-friendly.md