博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Go 语言的 4 个特性改动
阅读量:6324 次
发布时间:2019-06-22

本文共 1411 字,大约阅读时间需要 4 分钟。

原文链接:

前言

Golang 吉祥物

在 可以看到某个版本的 Go 语言一些改动文档(修改 URL 参数查看别的版本)。

其中以 标签下关于语言特性方面的尤为重要。

在每个 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 T1var v2 T2v1 = T1(v2) // 现在是合法的复制代码

类型别名

版本:Go1.9

类型别名:T1 完全是 T2 这个类型,这个新设计是为了重构和兼容旧代码。

type T1 = T2复制代码

类型声明:T1 的底层数据类型是 T1。

type T1 T2复制代码

一个简单的区别就是:类型声明和底层类型赋值时需要转换,而类型别名不需要。

参考链接

转载于:https://juejin.im/post/5c6621e36fb9a049b07ddf6d

你可能感兴趣的文章
POJ1860 Currency Exchange
查看>>
CNN 那么多的网络有什么区别吗?看这里了解 CNN 的发展历程
查看>>
多云中如何共享责任模式
查看>>
Adenium约旦57MW太阳能光伏项目投产
查看>>
《Servlet和JSP学习指南》一3.6 动作
查看>>
物联网市场FD-SOI制程会取代FinFET吗?
查看>>
《VMware、Citrix和Microsoft虚拟化技术详解与应用实践》一2.2 ESXi简介
查看>>
CSS3中linear-gradient实现百分比进度条
查看>>
Java设计模式精讲
查看>>
数据库索引为什么用B+树实现?
查看>>
Gensim训练维基百科语料库
查看>>
iOS 10.3应用内更换icon
查看>>
全局光照---光子映射
查看>>
支持向量机---线性支持向量机与软间隔最大化
查看>>
puppet自动化管理工具学习之文件
查看>>
Ubuntu安装RPM格式软件包
查看>>
SQL Server中的临时表和表变量 Declare @Tablename Table【转】
查看>>
汇编语言指令英文全称
查看>>
pure-ftpd脚本安装
查看>>
Linux NC 命令
查看>>