go 1.12
# 之后就可以编写 Go 文件,添加依赖后,执行 go run/
# 依赖会自动下载,并记录在 go.mod 内,版本信息记录在 go.sum
更多用法可以参考官方示例,这里只是想说明目前 Go 内的工具链大部分已经支持,但是 godoc 还不支持。
GC
Go 也是具有垃圾回收的语言,但相比于 JVM,Go GC 可能显得及其简单,从 Go 1.10 开始,Go GC 采用 Concurrent Mark & Sweep (CMS) 算法,且不具有分代、compact 特性。读者如果对相关名词不熟悉,可以阅读:
而且 Go 里面调整 GC 的参数只有一个 GOGC
,表示下面的比率
新分配对象 / 上次 GC 后剩余对象
默认 100,表示新分配对象达到之前剩余对象大小时,进行 GC。GOGC=off
可以关闭 GC,SetGCPercent 可以动态修改这个比率。
在启动一个 Go 程序时,可以设置 GODEBUG=gctrace=1
来打印 GC 日志,日志具体含义可参考 pkg/runtime,这里不再赘述。对调试感兴趣的可以阅读:
总结
Go 最初由 Google 在 2007 为解决软件复杂度、提升开发效率的一试验品,到如今不过十二年,但无疑已经家喻户晓,成为云时代的首选。其面向接口的特有编程方式,也非常灵活,兼具动态语言的简洁与静态语言的高效,推荐大家尝试一下。Go Go Go!
扩展阅读