这是我参与「第五届青训营 」笔记创作活动的第1天
go特点
- 语法简单
- 并发模型
- 可以说,Goroutine 是 Go 最显著的特征。它用类协程的方式来处理并发单元,却又在运行时层面做了更深度的优化处理。这使得语法上的并发编程变得极为容易,无须处理回调,无须关注线程切换,仅一个关键字,简单而自然。
- 搭配 channel,实现 CSP 模型。将并发单元间的数据耦合拆解开来,各司其职,这对所有纠结于内存共享、锁粒度的开发人员都是一个可期盼的解脱。若说有所不足,那就是应该有个更大的计划,将通信从进程内拓展到进程外,实现真正意义上的分布式。
- 内存分配
- 将一切并发化固然是好,但带来的问题同样很多。如何实现高并发下的内存分配和管理就是个难题。好在 Go 选择了 tcmalloc,它本就是为并发而设计的高性能内存分配组件。
- 垃圾回收
- 静态链接(c++特性,强类型)
- 快速编译
- 跨平台
- 标准库
- 工具链
go与c++的区别:
- switch语句:
- c++在不break的情况下会顺序执行;go不会。
- c++只能对一个整型或枚举类型进行判别,或者是一个 class 类型(其中 class 有一个单一的转换函数将其转换为整型或枚举类型);但go可以对任意类型,甚至可以不加expression,完成一个if-else的功能。
- 切片slice:
- 底层数据结构是什么?
- 扩容的逻辑:参考
- 申请新的空间,copy原有的数据
- 在容量1000之前,扩容后容量翻倍,容量>1000的增长因子会设为 1.25,也就是会每次增加 25%的容量(随着语言的演化,这种增长算法可能会有所改变)。
- 底层数据结构是什么?
go应用-SOCKS5
过一遍代码