Go语言精进之路:从新手到高手的编程思想、方法和技巧1
元数据
- 书名: Go语言精进之路:从新手到高手的编程思想、方法和技巧1
- 作者: 白明
- 简介: Go入门容易,精进难,如何才能像Go开发团队那样写出符合Go思维和语言惯例的高质量代码呢?本书将从编程思维和实践技巧2个维度给出答案,帮助你在Go进阶的路上事半功倍。编程思维层面:只有真正领悟了一门语言的设计哲学和编程思维,并能将之用于实践,才算精通了这门语言。本书从Go语言设计者的视角对Go背后的设计哲学和编程思想进行了梳理和分析,指引读者体会那些看似随意实则经过深思熟虑的设计背后的秘密。实践技巧层面:实践技巧源于对Go开发团队和Go社区开发的高质量代码的阅读、挖掘和归纳,从项目结构、代码风格、语法及其实现、接口、并发、同步、错误与异常处理、测试与调试、性能优化、标准库、第三方库、工具链、最佳实践、工程实践等多个方面给出了改善Go代码质量、写出符合Go思维和惯例的代码的有效实践。学完这本书,你将拥有和Go专家一样的编程思维,写出符合Go惯例和风格的高质量代码,从众多Go初学者中脱颖而出,快速实现从Go新手到专家的转变!
- 出版时间 2022-01-01 00:00:00
- ISBN: 9787111698210
- 分类: 计算机-编程设计
- 出版社: 机械工业出版社
这里的内容仅为读书笔记,如果您需要阅读原版书籍,请购买正版以支持原创。感谢您的理解和支持。
高亮划线
3.2 偏好组合,正交解耦
-
📌 C++、Java等主流面向对象(以下简称OO)语言通过庞大的自上而下的类型体系、继承、显式接口实现等机制将程序的各个部分耦合起来,但在Go语言中我们找不到经典OO的语法元素、类型体系和继承机制,或者说Go语言本质上就不属于经典OO语言范畴。
- ⏱ 2023-03-22 12:22:33
-
📌 Go语言遵从的设计哲学也是组合。
- ⏱ 2023-03-22 16:16:30
-
📌 Go采用了组合的方式,也是唯一的方式。
- ⏱ 2023-03-22 16:17:24
-
📌 Go语言提供的最为直观的组合的语法元素是类型嵌入(type embedding)。通过类型嵌入,我们可以将已经实现的功能嵌入新类型中,以快速满足新类型的功能需求。
- ⏱ 2023-03-22 16:18:22
-
📌 在通过新类型实例调用方法时,方法的匹配取决于方法名字,而不是类型
- ⏱ 2023-03-22 16:24:19
-
📌 // $GOROOT/src/sync/pool.gotype poolLocal struct { private interface{} shared []interface{} Mutex pad [128]byte}我们在poolLocal这个结构体类型中嵌入了类型Mutex,被嵌入的Mutex类型的方法集合会被提升到外面的类型(poolLocal)中。比如,这里的poolLocal将拥有Mutex类型的Lock和Unlock方法。但在实际调用时,方法调用会被传给poolLocal中的Mutex实例。
- ⏱ 2023-03-22 16:26:40
-
📌 通过在interface的定义中嵌入interface类型来实现接口行为的聚合,组成大接口,这种方式在标准库中尤为常用,并且已经成为Go语言的一种惯用法。
- ⏱ 2023-03-22 16:27:53
-
📌 隐式的interface实现会不经意间满足依赖抽象、里氏替换、接口隔离等设计原则
- ⏱ 2023-03-22 16:28:28
-
📌 组合原则的应用塑造了Go程序的骨架结构。类型嵌入为类型提供垂直扩展能力,interface是水平组合的关键,
- ⏱ 2023-03-22 16:34:04
3.3 原生并发,轻量高效
-
📌 并发是有关结构的,而并行是有关执行的。
- ⏱ 2023-03-22 16:34:48
-
📌 用户层轻量级线程或者说是类协程(coroutine)
- ⏱ 2023-03-22 16:39:15
-
📌 Go运行时默认为每个goroutine分配的栈空间仅2KB。goroutine调度的切换也不用陷入(trap)操作系统内核层完成,代价很低
- ⏱ 2023-03-22 16:39:37
-
📌 所有的Go代码都在goroutine中执行,哪怕是Go的运行时代码也不例外。
- ⏱ 2023-03-22 16:40:21
-
📌 而将这些goroutine按照一定算法放到CPU上执行的程序就称为goroutine调度器(goroutine scheduler)
- ⏱ 2023-03-22 16:41:04
-
📌 并发goroutine的通信:通过语言内置的channel传递消息或实现同步,并通过select实现多路channel的并发控制。
- ⏱ 2023-03-22 16:46:04
-
📌 并发程序的结构设计不要局限于在单核情况下处理能力的高低,而要以在多核情况下充分提升多核利用率、获得性能的自然提升为最终目的。
- ⏱ 2023-03-22 16:53:43
-
📌 goroutine各自执行特定的工作,通过channel+select将goroutine组合连接起来
- ⏱ 2023-03-22 16:54:01
3.4 面向工程,“自带电池”
-
📌 首字母大小写定义标识符可见性,这是Go的一个创新
- ⏱ 2023-03-22 17:12:54
4.3 Go语言原生编程思维
-
📌 我们学习和使用一门编程语言,目标是用这门语言的原生思维方式编写高质量代码。
- ⏱ 2023-03-23 11:46:45
5.1 Go项目的项目结构
-
📌 1)代码构建的脚本源文件放在src下面的顶层目录下。2)src下的二级目录cmd下面存放着Go工具链相关的可执行文件(比如go、gofmt等)的主目录以及它们的main包源文件。
- ⏱ 2023-03-23 11:50:16
-
📌 3)src下的二级目录pkg下面存放着上面cmd下各工具链程序依赖的包、Go运行时以及Go标准库的源文件。
- ⏱ 2023-03-23 11:51:27
5.2 Go语言典型项目结构
-
📌 在Go典型项目中,项目构建工具的脚本一般放在项目顶层目录下,比如这里的Makefile;对于构建脚本较多的项目,也可以建立build目录,并将构建脚本的规则属性文件、子构建脚本放入其中。
- ⏱ 2023-03-23 11:59:41
读书笔记
3.3 原生并发,轻量高效
划线评论
-
📌 并发是有关结构的,它是一种将一个程序分解成多个小片段并且每个小片段都可以独立执行的程序设计方法;并发程序的小片段之间一般存在通信联系并且通过通信相互协作。
并行是有关执行的,它表示同时进行一些计算任务。- 💭 并发是结构性的,它是将一个大服务拆分成多个小服务,这些小服务互相协作去完成一个复杂的逻辑实现。类似于工厂流水线,原料生产后将原料储存在原料仓库,部件生产流水线将材料从原料仓库取出生产部件,部件生产完成后放入部件仓库。组装流水线将部件材料从部件仓库中取出,将部件组装完成。这些步骤都可以同时进行,由此形成一个完整的业务逻辑
- ⏱ 2023-03-22 17:01:25