内容简介:在Go1.1 可以看到某个版本的 Go 语言一些改动文档(修改 URL 参数查看别的版本)。其中以Go1.1#language 标签下关于语言特性方面的尤为重要。在每个 Go 语言新版本发布后浏览一下,是个良好的习惯。
在 Go 1.1 可以看到某个版本的 Go 语言一些改动文档(修改 URL 参数查看别的版本)。
其中以Go1.1#language 标签下关于语言特性方面的尤为重要。
在每个 Go 语言新版本发布后浏览一下,是个良好的习惯。
下面我会从 Go1.1 到 Go1.11 以来挑 4 个值得讨论的改动来跟大家分享一下。
三索引切片
版本: Go1.2
在现有数组或切片下,使用第二个冒号来指示新生成的切片的容量。
func TestThreeIndex(t *testing.T) {
s := [10]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
s1 := s[2:4] // 等价于 s[2:4:cap(s)],省略取 cap(s)。
t.Log(s1) // [2, 3]
t.Log(len(s1), cap(s1)) // len = 2, cap = 8
// 可以访问在 cap 以内的元素并且如果访问在 len 和 cap 之间的元素就可以访问到底层数组。
t.Log(s1[0:7]) // [2, 3, 4, 5, 6, 7, 8, 9]
// 通过限制 cap 从而限制新的切片访问底层数组的能力。
// cap 取值必须小于或等于底层数组 cap。
s2 := s[2:4:7] // cap = 7 - 2 = 5
t.Log(s2) // [2, 3]
t.Log(len(s2), cap(s2)) // len = 2, cap = 5
t.Log(s2[0:5]) // [2, 3, 4, 5, 6]
// error: slice bounds out of range
// 越界
t.Log(s2[0:7])
}
复制代码
for range 简便写法
版本:Go1.4
for range 不需要索引和索引对应的元素值的简便写法。
- 不需要索引。
for _, v := range s {
t.Log(v)
}
复制代码
- 不需要索引对应的值。
for i := range s {
t.Log(i)
}
复制代码
- (Go1.4新增)不需要索引和索引对应的值,单纯地把容器类型元素的个数作为迭代的次数。
for range s {
...
}
复制代码
结构体类型转换忽略标签
版本:Go1.8
结构体类型转换时,标签会被忽略。也就是说,标签不同的结构体之间也可以互相转换类型。
注意:正常情况下(没有标签)的结构体类型之间的转换只有字段名、类型和声明的顺序全部相同才合法。
type T1 struct {
X int `json:"foo"`
}
type T2 struct {
X int `json:"bar"`
}
var v1 T1
var v2 T2
v1 = T1(v2) // 现在是合法的
复制代码
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Kotlin 1.4 中的语法改动
- Java 9 对类加载器的改动
- Elasticsearch 高基数聚合性能提升 3 倍,改动了什么?
- 小改动,大提升:Go 标准库的一次优化
- NG-ZORRO 0.7.0 发布,底层大量重构与改动更新
- 使用一句 git 命令将仓库的改动推送到所有的远端
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Beginning ASP.NET 4 in C# and Vb
Imar Spaanjaars / Wrox / 2010-3-19 / GBP 29.99
This book is for anyone who wants to learn how to build rich and interactive web sites that run on the Microsoft platform. With the knowledge you gain from this book, you create a great foundation to ......一起来看看 《Beginning ASP.NET 4 in C# and Vb》 这本书的介绍吧!