Matthias Endler 写给后端团队的迁移指南。Go 已经站在静态类型编译语言这边,换 Rust 换来的不是速度,而是 nil、错误传播、数据竞争和取消原本靠约定和 linter 兜住的检查进了类型系统,代价是借用检查器、编译时间和 async 着色。
Posts for: #golang
Golang1.21-maps package
Go1.21 正式引入了 maps 包,该包提供了 map 相关的工具函数,包括 Clone、Copy、Delete、Equal 等。
Golang1.21-slices package
Go1.21 正式引入了 slices 包,该包提供了 slice 相关的工具函数,包括 Sort、Contains、Index 等常用操作。
Golang1.21兼容性问题-向前兼容
Go 老版本的工具链怎么保证新版本的代码可以正常工作?Go1.21 引入了 toolchain 指令和 GOTOOLCHAIN 环境变量来解决向前兼容问题。
Golang1.21兼容性问题-向后兼容
Go 新版本的工具链怎么保证老版本的代码可以正常工作?Go1.21 对向后兼容做了更新和更清晰的阐述,包括 GODEBUG 的作用。
Golang1.21语言特性更新
探索 Go1.21 语言特性更新,包括新增内置函数 min、max、clear 以及 loop variable 作用域修复等改动。
Golang1.21类型推断增强
Go1.21 对泛型的类型推断做了增强,泛型代码因此能写得更简洁,增强了哪些地方逐条过一遍。
Go 官方博客解释 type parameters 的推断规则
Go 官方博客《Deconstructing Type Parameters》从 slices.Clone 的签名逐步改起,一层层看 ~ 约束和类型推断为什么要设计成这样。
Golang1.21的package初始化顺序变更
Go1.21 之前 package 初始化并没有明确地规定,1.21 中明确了 package 初始化的顺序,避免了依赖 init 函数顺序的不确定性。
Golang1.20新特性 multi errors
Go1.20 把 multi errors(多错误包装)收进了标准库,原先依赖第三方库的地方可以换下来,errors.Join 和 fmt.Errorf 的多 %w 用法各用在什么场合。