Go 语言的 4 个特性改动
文章目录
在 Go1.1 可以看到某个版本的 Go 语言一些改动文档(修改 URL 参数查看别的版本)。
其中以 Go1.1#language 标签下关于语言特性方面的尤为重要。
在每个 Go 语言新版本发布后浏览一下,是个良好的习惯。
下面我会从 Go1.1 到 Go1.11 以来挑 4 个值得讨论的改动来跟大家分享一下。
三索引切片
版本: Go1.2
在现有数组或切片下,使用第二个冒号来指示新生成的切片的容量。
|
|
for range 简便写法
版本:Go1.4
for range 不需要索引和索引对应的元素值的简便写法。
不需要索引。
1 2 3
for _, v := range s { t.Log(v) }
不需要索引对应的值。
1 2 3
for i := range s { t.Log(i) }
(Go1.4新增)不需要索引和索引对应的值,单纯地把容器类型元素的个数作为迭代的次数。
1 2 3
for range s { ... }
结构体类型转换忽略标签
版本:Go1.8
结构体类型转换时,标签会被忽略。也就是说,标签不同的结构体之间也可以互相转换类型。
注意:正常情况下(没有标签)的结构体类型之间的转换只有字段名、类型和声明的顺序全部相同才合法。
|
|
类型别名
版本:Go1.9
类型别名:T1 完全是 T2 这个类型,这个新设计是为了重构和兼容旧代码。
|
|
类型声明:T1 的底层数据类型是 T1。
|
|
一个简单的区别就是:类型声明和底层类型赋值时需要转换,而类型别名不需要。