Go 语言的特性
Go语言(Golang)是由Google公司开发的一种静态强类型、编译型、并发型且具有垃圾回收功能的编程语言。
接下来从几个方面介绍Go语言的特性。
语法简单
Go语言在类型和规则上与C99、C11有诸多相似之处,被称为“NextC”。 Go语言的语法规则严谨,无歧义,简单易学。例如,将“++”、“--”从运算符降级为语句,保留指针但默认阻止指针运算,将切片和字典作为内置类型并从运行时层面优化。
并发模型
Go语言将一切并发化,用Goroutine运行所有内容,包括main.main入口函数。 Goroutine是Go语言的显著特征,它用类协程的方式处理并发单元,并在运行时进行深度优化,使并发编程变得简单自然。 搭配channel,实现CSP模型,将并发单元间的数据耦合拆解,各司其职。
内存分配
Go语言选择tcmalloc作为内存分配器,它本就是为并发设计的高性能内存分配组件。 内存分配器使用cache为当前执行线程提供无锁分配,多个central在不同线程间平衡内存单元复用,heap管理大块内存。 编译器会竭力将对象分配在栈上,以降低垃圾回收压力,提升执行性能。
垃圾回收
垃圾回收是个难题,Go语言因指针存在,回收内存不能做收缩处理,且指针运算被阻止。 每次升级,垃圾回收器都是核心组件中修改最多的部分,从并发清理到降低STW时间,再到实现并发标记等,都是为了更好地工作,但当前版本的垃圾回收算法仍有待改进。
静态链接
Go语言刚发布时,静态链接被当作优点宣传,可将运行时、依赖库直接打包到可执行文件内部,简化部署和发布操作。 虽然后来编译器在完善动态库buildmode功能,但静态编译的好处依然明显。
标准库
功能完善、质量可靠的标准库为Go语言提供了充足动力,可完成大部分基础功能开发,降低学习和使用成本。 Go标准库极为丰富,如net/http,可简单实现高性能Web Server,还有大批优秀的第三方Framework,使Go成为Web/Microservice开发标准之一。
工具链
Go语言的工具链完整,包括编译、格式化、错误检查、帮助文档、第三方包下载和更新等工具,内置完整测试框架,可保障代码正确稳定运行。 还可通过环境变量输出运行时监控信息,帮助改进算法,获得更佳的运行期表现。