Go语言的设计初衷
- 如果有一门编程语言,有像C/C++那样性能,可以做系统开发。
但是繁琐的类型系统(虚函数、纯虚函数重载等等),编译速度慢
- 如果有一门语言,像Java那样拥有垃圾回收
但是垃圾回收导致慢
- 如果有一门语言,像Python那样简单易学,拥有灵活的类型,支持函数式编程,异步IO
但是Python是解释型语言比较慢,没有编译器那样进行静态类型检查
Go语言的归类
类型检查:编译时
运行环境:编译成机器代码直接运行
编程方式:面向接口、函数式编程、并发编程
Go语言并发编程
- 采用CSP模型
- 不需要锁,不需要callback
- 并发编程vs并行计算
Go语言的编译
Golang的编译(不涉及cgo编译的前提下)默认使用了静态编译,不依赖任何动态链接库。
这样可以任意部署到各种运行环境,不用担心依赖库的版本问题。只是体积大一点而已,存储时占用了一点磁盘,运行时,多占用了一点内存。早期动态链接库的产生,是因为早期的系统的内存资源十分宝贵,由于内存紧张的问题在早期的系统中显得更加突出,因此人们首先想到的是要解决内存使用效率不高这一问题,于是便提出了动态装入的思想。也就产生了动态链接库。在现在的计算机里,操作系统的硬盘内存更大了,尤其是服务器,32G、64G 的内存都是最基本的。可以不用为了节省几百 KB 或者1M,几 M 的内存而大大费周折了。而 golang 就采用这种做法,可以避免各种 so 动态链接库依赖的问题,这点是非常值得称赞的。