Go 语言的 4 个特性改动

栏目: Go · 发布时间: 5年前

内容简介:在Go1.1 可以看到某个版本的 Go 语言一些改动文档(修改 URL 参数查看别的版本)。其中以Go1.1#language 标签下关于语言特性方面的尤为重要。在每个 Go 语言新版本发布后浏览一下,是个良好的习惯。
Go 语言的 4 个特性改动
Golang 吉祥物

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) // 现在是合法的
复制代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

C++数值算法(第二版)

C++数值算法(第二版)

William T.Vetterling、Brian P.Flannery、Saul A.Teukolsky / 胡健伟、赵志勇、薛运华 / 电子工业出版社 / 2005年01月 / 68.00

本书选材内容丰富,除了通常数值方法课程的内容外,还包含当代科学计算大量用到的专题,如求特殊函数值、随机数、排序、最优化、快速傅里叶变换、谱分析、小波变换、统计描述和数据建模、常微分方程和偏微分方程数值解、若干编码算法和任意精度的计算等。 本书科学性和实用性统一。每个专题中,不仅对每种算法给出了数学分析和比较,而且根据作者的经验对算法做出了评论和建议,并在此基础上给出了用C++语言编写的实用程......一起来看看 《C++数值算法(第二版)》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

MD5 加密
MD5 加密

MD5 加密工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具