Go 的语言实现十分的简洁,但简洁而不简陋。它没有和 Java 一样因为遵循 面向对象 而导致的臃肿语法,也没有像 Python 一样只通过缩进来约束的代码结构。go fmt 格式化工具会在一些 Go 语言的开发环境或者编辑器在保存时,将代码的格式化,这样就保证了不同开发者提交的代码都是为统一的格式。
虽然 Go 在有一些地方仍需要完善,但简洁易懂的语法和 go fmt 格式化工具等无疑是降低了使用者的心智负担。
和 Java 等传统的语言实现的多进程不同,Go 的执行并发单元是一种被称为 goroutine 的协程,goroutine 可以理解为官方实现的超级 "线程池",每个实例的栈内存仅为 4~5KB 和 由于实现机制而大幅减少的创建和销毁开销是Go高并发的根本原因。在同一台机器上可以启动成千上万个协程。
如若搭配 Go 独有的 channel 实现 CSP 模型,将并发单元间的数据耦合拆解开来,各司其职,这对所有纠结于内存共享、锁粒度的开发人员都是一个可期盼的解脱。可以说 高并发 是 Go 语言的最大亮点。
Go 实现了 GC 机制,使得Go 开发人员无需和C/C++一样考虑内存崩溃等问题, 降低使用者的 心智负担, 相比 Java,Go 面临的困难要更多。因指针的存在,所以回收内存不能做收缩处理。幸好,指针运算被阻止,否则要做到精确回收都十分困难。
每次升级,垃圾回收器必然是核心组件里往往修改最多的部分。从并发清理,到降低 STW 时间,直到 Go 的 1.5 版本实现并发标记,逐步引入三色标记和写屏障等等,都是为了能让垃圾回收在不影响用户逻辑的情况下更好地工作。
总结一下,垃圾回收 是使 Go 易用的一大优点,但它仍然努力优化争取做得更好。