Go语言版本

Go语言版本教程

Go 1.11

  • 实验性支持 WebAssembly (js/wasm)。

  • 实验性启用版本和依赖管理 Go Modules,替代 GOPATH。

  • 最后一个支持 GOCACHE=off 的版本。

  • 编译器支持内联更多类型函数,包括调用 panic 的函数。

  • 编译优化 map delete、slice append。

  • 更准确的调试信息,对没有 -N -l 编译结果提供更好支持。

  • 允许在 delve 调试器中调用函数。

  • 最后一个支持 godoc 命令行的版本,未来基于 web。

  • 内存分配器使用稀疏堆,不再有 512GB 限制。

Go 1.10

  • 工具链从可执行文件路径推导 GOROOT。

  • 可用 GOTMPDIR 设置专用临时目录。

  • 使用 GOCACHE 缓存编译结果,与 GOROOT/GOPATH 中已安装的编译结果隔离。

  • 编译参数(gcflags 等)仅作用于命令行列出的包。

  • 安装命令(go install)仅安装命令行列出的包,不含依赖项。

  • 单元测试(go test)也将使用缓存加速。

  • 性能测试(go tool pprof)新增 WEB 界面。

  • 堆栈跟踪(stack trace)不再包含编译器自动生成(autogenerated)的函数。

  • GOMAXPROCS 最大限制取消。

  • LockOSThread/UnlockOSThread 嵌套数量必须匹配。

Go 1.9

  • 类型别名。
  • 并行编译。(GO19CONCURRENTCOMPILATION=0 禁用)
  • 工具集默认不再扫描 vendor 目录。
  • 安装目录不再固定。(可显式设置 GOROOT)
  • 新增 sync/map。
  • 新增 test helper。
  • 新增 pprof label。

Go 1.8

  • 不同的 tag 不再阻止 struct 显式转换。
  • 改善 map 并发操作检测。
  • 垃圾回收暂停时间进一步缩短到(10~100 us)。
  • 函数参数生命周期不再等同整个栈帧,可被提前回收,需用 KeepAlive 保持。
  • 改进 defer、CGO 调用开销(一半)。
  • 编译后端 SSA 支持所有平台,gcflags -ssa=0 参数被移除。
  • 支持默认 GOPATH 设置 $HOME/go。
  • 支持插件模式(buildmode: plugin)。
  • 支持 mutex profile。
  • 工具链 yacc 移除。
  • 工具链 pprof 支持 https+insecure 模式。
  • HTTP2/push,HTTP Server Graceful Shutdown。

Go 1.7

  • AMD64 使用 SSA 后端,可使用 gcflags “-ssa=0” 关闭。
  • 新二进制格式。
  • 链接器不再支持 -X name value,须使用 -X name=value。
  • 包依赖 vendor 成为正式功能,移除 GO15VENDOREXPERIMENT 环境变量。
  • 为 x86–64 增加对 Linux’s perf、Intel’s VTune 工具支持(设置并保存 BP 寄存器值)。
  • 实验性支持 Binary-only package。(静态包,不再需要源码文件)

Go 1.6

  • CGO 支持指针共享。
  • 重写 parser,替代 yacc 生成。
  • 编译器增加 -msan 参数,支持 Clang MemorySanitizer,用于探测读未初始化内存(CGO)。
  • 增加 buildmode c-shared 支持。
  • GO15VENDOREXPERIMENT 默认 1。
  • HTTP2 支持。

Go 1.5

  • Golang 重写运行时和编译器,需要使用 Go 编译 Go。
  • 对 6g、6l 重命名,改为 compile、linker、asm。
  • 新 GC 算法,实现并发标记和清理,增加控制器和辅助回收等。
  • GOMAXPROCS 默认 cores 数量。
  • 增加 buildmode 支持,生成共享库。
  • 支持 internal、vendor 包。
  • 支持 go tool trace 命令,跟踪执行过程。