上卷 程序设计
中卷 标准库
- bufio 1.18
- bytes 1.18
- io 1.18
- container 1.18
- encoding 1.18
- crypto 1.18
- hash 1.18
- index 1.18
- sort 1.18
- context 1.18
- database 1.18
- connection
- query
- queryrow
- exec
- prepare
- transaction
- scan & null
- context
- tcp
- udp
- http
- server
- handler
- client
- h2、tls
- url
- rpc
- exec
- signal
- embed 1.18
- plugin 1.18
- reflect 1.18
- runtime 1.18
- KeepAlived
- ReadMemStats
- SetFinalizer
- Stack
- sync 1.18
- atomic
- mutex
- rwmutex
- waitgroup
- cond
- once
- map
- pool
- copycheck
- nocopy
- unsafe 1.18
- fmt 1.18
- log 1.18
- math 1.18
- time 1.18
- timer
下卷 运行时
源码剖析
附录
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
版本 变更记录
1.21
- 新增
min
、max
、clear
内置函数。 - 如
panic(nil)
,recover
返回*PanicNilError
。 - 类型推断(type inference)能力提升。
- 包初始化顺序规范。
- 编译优化 PGO 正式启用,默认 "
-pgo=auto
"。
- 新增 log/slog。
- 新增 testing/slogtest。
- 新增 slices。
- 新增 maps。
- 新增 cmp。
- 支持 MPTCP (MultiPath TCP)。
- 反射
ValueOf
不再强制堆分配。
1.20
- 将切片直接转换为数组。
- 可比较类型完全符合
comparable
泛型约束。
- 使用 PGO 优化编译。(预览)
- 标准库编译到缓存目录,缩减发行版文件大小。
- 最后支持 macOS 10.13/10.14、Windows 7/8 的版本。
- 新增 unsafe
SliceData
、String
、StringData
函数。 - 新增 errors
Join
打包多个错误对象,并调整相关函数。 - 新增 context
WithCancelCause
函数。 - 新增 crypto/ecdh。
- 试验 arena。(
GOEXPERIMENT=arenas
)
1.19
- 增加
//go:build unix
支持。 - 改善 switch 性能。
- 运行时内存限制(soft memory limit, GOMEMLIMIT)。
- 自动将文件限制(open file limit)调整到最大值(hard limit)。
- 竞争检测(race detector, thread sanitizer)升级到 v3。
- 新增
sync/atomic.Int32
等类型原子版本。
1.18
- 泛型支持。(尚不完善)
- 模糊测试。(Fuzzing)
go work
对工作空间(workspace)支持。go get
专注于依赖管理,不再构建(build)和安装(install)包。
- 垃圾回收器支持非堆(noheap)内存。
- 可内联包含循环的函数。
- 新增 debug/buildinfo。
- 新增 net/netip。
1.17
- 直接从切片转换为数组指针。
- 新增
unsafe.Add
和unsafe.Slice
简化操作。
- 模块获取
-insecure
参数被移除,以GOINSECURE
代替。 - 如模块缺失
go version
指令,则使用 1.11/1.16 版本。 - 以
//go:build
替代// +build
。
- 编译器实现了以寄存器传递参数。
- 改进错误信息中的调用堆栈信息。
- 可内联含闭包的函数。
1.16
- 单元测试调用
os.Exit(0)
视为失败。
- 无论是否有 go.mod,模块感知都为默认模式。
- 编译命令(go build, go test)不再修改 go.mod,使用 go get 和 go mod tidy。
- 安装命令(go install)支持版本号。
- 下载命令(go get)不再使用 insecure 非安全方式。
- 调试
GODEBUG=inittrace=1
输出初始化函数执行信息。 - 使用
MADV_DONTNEED
代替MADV_FREE
,立即释放物理内存。
- 新增
//go:embed
向目标文件嵌入静态文件(文件树)。 - 新增
runtime/metrics
,替代runtime.ReadMemStats
。 - 弃用
io/ioutil
。
1.15
- GOPROXY 支持逗号和竖线分隔。(逗号仅在 404、410 时尝试下一代理)
- GOMODCACHE 设置模块缓存位置,默认
GOPATH[0]/pkg/mod
。
- 预置小整数表(0 ~ 255)。转换为接口时,不再分配额外内存。
- 链接器重大改进。
1.14
- 嵌入重叠接口。(方法集是所有嵌入声明的并集)
- 模块可用于生产环境。
- 环境变量 GOINSECURE 指示某些源不使用 HTTPS,跳过证书验证。
- 内联调用 defer 函数(inline call),提升性能。
- 基于信号(signal)的异步抢占调度。
- 内存分配器延迟更小,吞吐量更高。
- 重新设计的内部定时器(internal timer)更高效。
- 新增 hash/maphash。
- 增加 testing.T.CleanUp。
macOS 平台约定,二进制内 Go 符号以下划线开头。
1.13
- 增加二进制(0b)、八进制(0o)整数字面量。
- 增加十六进制浮点字面量。
- 增加虚数字面量。
- 使用下划线作为数字分隔符(000_111_222)。
- 移除位移数(shift count)必须是无符号整数(unsigned)限制。
- 模块感知 GO111MODULE 默认开启。
- 模块相关环境变量: GOPRIVATE, GOPROXY, GOSUMDB。
- 提升
defer
性能。(deferprocStack) - 更积极归还物理内存。(bgscavenge)
errors
支持unwrap
相关操作。(fmt.Errorf %w
)
1.12
- 改写
go vet
,不再支持go tool vet
。 - 编译缓存必须,不能用
GOCACHE=off
关闭。 - 最后一个支持
//go:binary-only-package
的版本。
- 改进存活变量分析,更快执行
Finalizer
操作。 - 支持更多函数内联。建议用
runtime.CallersFrames
代替Callers
。 - 支持
-lang
参数指定语言版本,用于检查新增语法兼容问题。 - 使用不同调用约定处理 Go 和 ASM 函数。
- 提升 DWARF 调试信息。
- 改进 trace 跟踪信息。
- 提升垃圾清理性能,减少分配延时。
- 更积极向操作系统归还内存。
- 改用
MADV_FREE
释放物理内存。
- 函数
runtime.Caller
等不再包含编译器自动生成的初始化函数。
- 标准库
crypto/tls
支持 TLS 1.3。
Darwin syscall 使用 libSystem,确保兼容 macOS 和 iOS。
1.11
- 在
type.switch
里的未使用变量视为错误。
- 实验性支持 WebAssembly。
- 实验性启用依赖管理 Modules,替代 GOPATH。
- 实验性支持在调试器(delve)中调用函数(call)。
- 最后一个支持
GOCACHE=off
的版本。
- 编译器支持内联更多类型函数,包括调用
panic
的函数。 - 编译优化 map delete、slice append。
- 更准确的调试信息,对没有
-N -l
编译结果提供更好支持。 - 单元测试默认调用
go vet
进行检查。 - 最后一个支持
godoc
命令行的版本,未来基于 web。
- 内存分配器使用稀疏堆,不再有 512GB 限制。
符号 @ 在 module 中有特殊含义,命令行不再支持 @ 符号。
1.10
- 使用
GOCACHE
缓存编译结果。 - 单元测试(go test)也将使用缓存加速。
- 性能测试(go tool pprof)新增 WEB 界面。
- 堆栈跟踪(stack trace)不再包含编译器自动生成(autogenerated)函数。
- GOMAXPROCS 最大限制取消。
LockOSThread
/UnlockOSThread
嵌套数量必须匹配。
1.9
- 类型别名。(
type Alias = Name
)
- 并行编译。(
GO19CONCURRENTCOMPILATION=0
禁用) - 工具集默认不再扫描
vendor
目录。 - 安装目录不再固定。(可显式设置
GOROOT
)
- 新增 sync/map。
- 新增 test helper。
- 新增 pprof label。
1.8
- 不同的 tag 不再阻止 struct 显式转换。
- 改善
map
并发操作检测。 - 垃圾回收暂停时间进一步缩短到(10 ~ 100 us)。
- 函数参数生命周期不再等同整个栈帧,可提前回收,用
KeepAlive
保持。 - 改进
defer
、CGO 调用开销(一半)。
- 编译后端 SSA 支持所有平台。
- 默认
GOPATH
设置$HOME/go
。 - 插件模式(buildmode:
plugin
)。 - 支持 mutex profile。
- HTTP2/push,HTTP Server Graceful Shutdown。
1.7
- 新二进制格式。
- AMD64 使用 SSA 后端。
- 包依赖
vendor
成为正式功能。 - 增加对 Linux's perf、Intel's VTune 工具支持(设置并保存 BP 寄存器值)。
- 实验性支持 binary-only package。(静态包,不再需要源码文件)
BP 寄存器可选: 在 make.bash 构建工具链时添加
GOEXPERIMENT=noframepointer
屏蔽。
1.6
- CGO 支持指针共享。
- 重写
parser
,替代yacc
生成。 - 增加
buildmode
c-shared
支持。
- HTTP2 支持。
1.5
- 自举:用 Go 重写运行时和编译器,需要使用 Go 编译 Go。
- 重命名
6g
、6l
,改为compile
、linker
、asm
。 - 环境变量
GOMAXPROCS
默认cores
数量。 - 增加
buildmode
支持,生成共享库。
- 支持
internal
、vendor
包。 - 支持
go tool trace
命令,跟踪执行过程。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论