这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
由于自己之前是Java选手,因此本次go笔记针对Java不同的才会详细记录,其他可能会一笔带过
go的特点
- 静态编译
- 编译速度快
- 天生并发性
- 提供内存分配、垃圾回收和并发调度
- 完成的工具链和丰富的标准库
- 支持多平台
- 大规模应用于大企业和云计算等服务
类型
var
- 自动初始化为二进制
- 显示提供初始值
- 同一作用域不能重复定义
方法
- 前置接收参数 receiver,代码方法所属类型
- 可为当前包内除了接口和指针以外的任何类型和定义方法
- 不支持金泰方法或关联函数
- 不支持重载
接口
- 在设计上,接口接触显示类型依赖(DIP,依赖导致),提供面对对象多态性
- 定义小型、灵活以及组合性接口(ISP,接口隔离),减少可视方法,屏蔽内部接口和实现细节
- 不能有字段
- 只能声明方法,不能实现
- 可嵌入其他接口
- 通常以
er作为名称后缀 - 空接口(interface{}, any)没有任何方法声明
匿名嵌入
- 像匿名字段那样,嵌入其他接口
- 嵌入相当于导入方法声明
- 不能嵌入自身或循环嵌入
- 鼓励小接口嵌入组合
- 可以有相同签名(方法名、参数列表和返回值,不包括参数名)的方法声明
- 最终方法集里相同声明仅有一个
类型转化 超集接口可隐式转化为子集,反之不行
泛型
泛型郧西在强类型语言代码中使用参数行类型,实例化时指明类型参数,有时候被称为模板
并发、并行
并发:逻辑上具备同时处理多个任务的能力 并行:物理上同一时刻执行多个并发任务
并行需要多进程或多线程支持,二并发可在单线程上以协程实现 协程通常是指在单线程上,通过写作时切换执行多个任务的并发设计
混合编程
- asm: 汇编
- cgo: 与C交互
测试
测试驱动开发时一种软件开发过程中的应用方法
- 实现:先写测试,然后编码快速实现
- 重构:在测试保护下,去除冗余代码,提高代码质量