Go编程哲学
- 自动垃圾回收
- 一个包系统
- 函数
- 词法作用域
- 系统调用接口
- 只读的UTF8字符串
- 没有隐式的数值转换
- 没有构造函数和析构函数
- 没有运算符重载
- 没有默认参数
- 没有继承
- 没有泛型
- 没有异常
- 没有宏
- 没有函数修饰
- 更没有线程局部存储
Go的并发
基于CSP的并发特性;动态栈使得轻量级线程goroutine的初始栈很小,因此,创建一个goroutine的代价很小,创建百万级的gorountine完全是可行的。
Go的基本内容
基础部分
与主流命令式编程语言相似,方法、接口、并发、包、测试和反射等特性是Go特有的
- 基本元素结构
- 变量
- 新类型定义
- 包和文件
- 作用域
- 数字
- 布尔值
- 字符串
- 常量
- 如何显示和处理Unicode字符
- 复合类型
- 数组
- 字典
- 切片
- 动态列表
- 函数
- 错误处理
- panic和recover
- defer语句
方法
- Go语言的面向对象机制与一般语言不同,没有类层次结构,甚至可以说没有类;
- 仅仅通过组合(而不是继承)简单的对象来构建复杂的对象。方法不仅可以定义在结构体上,而且,可以定义在任何用户自定义的类型上;并且,具体类型和抽象类型(接口)之间的关系是隐式的,所以很多类型的设计者可能并不知道该类型到底实现了哪些接口
接口
基于顺序通信进程(CSP)概念的并发编程
使用goroutines和channnels处理并发编程
传统的基于共享变量的并发编程
包机制和包的组织结构
如何有效地利用Go自带的工具,使用单个命令完成编译,测试,基准测试,代码格式化,文档以及其他诸多任务。
单元测试
Go语言的工具和标准库中集成了轻量级的测试功能,避免了强大但复杂的测试框架。测试库提供了一些基本构件,必要时可以用来构建复杂的测试构件。
反射
一种程序在运行期间审视自己的能力。反射是一个强大的编程工具,不过要谨慎地使用; 利用反射机制实现一些重要的Go语言库函数,展示了反射的强大用法。
更所底层编程的细节
在必要时,可以使用 unsafe 包绕过Go语言安全的类型系统