Go1.5 改进简介
- 纯Go(+少量汇编)实现 runtime 和 编译器
- 改进 垃圾回收器, 支持 并发 (有个指标好像是 停顿在 10 毫秒以内).
- GOMAXPROCS 默认值改为 CPU 核数
- internal 限制规则推广到第三方包 (之前只有 std 包启用)
- 增加 vendor 支持, 基本解决 第三方库的依赖问题和版本问题
- 增加 trace 命令, 更友好的剖析程序运行状态
- 增加 go doc 命令
语法变化
增加 map 字面量. 以前的代码:
m := map[Point]string{
Point{29.935523, 52.891566}: "Persepolis",
Point{-25.352594, 131.034361}: "Uluru",
Point{37.422455, -122.084306}: "Googleplex",
}
现在不需要每个都写 Point
了:
m := map[Point]string{
{29.935523, 52.891566}: "Persepolis",
{-25.352594, 131.034361}: "Uluru",
{37.422455, -122.084306}: "Googleplex",
}
工具变化
之前的 6g
/8g
之类的命令合并为一个了: go tool compile
,
汇编器和连接器也同样合并为一个了: go tool asm
, go tool link
.
目标文件统一用 .o
为后缀.
跨平台编译更简单了:
$ export GOOS=darwin GOARCH=amd64
$ go tool compile program.go
$ go tool link program.o
另外, vet
和 cover
已经稳定, 移到核心仓库.
go build
增加了 -buildmode
参数(Windows还不支持),
可以生成给C/C++使用的动态库和静态库(会有人用Go给Python/Ruby之类的语言写扩展吗?).
cgo 部分, Windows 终于支持外部链接, 也就是可以静态编译链接C++库了.
同时, 增加了一个 ${SRCDIR}
参数, 用于解决 link 时 当前目录变化导致找不到 .a
文件的问题.