写点什么

Go 学习笔记之 赋值

发布于: 2 小时前
Go 学习笔记之 赋值

使用赋值语句可以更新一个变量的值,最简单的赋值语句是将要被赋值的变量放在=的左边,新值的表达式放在=的右边。

x = 1                       // 命名变量的赋值*p = true                   // 通过指针间接赋值person.name = "bob"         // 结构体字段赋值count[x] = count[x] * scale // 数组、slice或map的元素赋值
复制代码

数值变量也可以支持++递增和--递减语句

自增和自减是语句,而不是表达式,因此x = i++之类的表达式是错误的

v := 1v++    // 等价方式 v = v + 1;v 变成 2v--    // 等价方式 v = v - 1;v 变成 1
复制代码


元组赋值

元组赋值是另一种形式的赋值语句,它允许同时更新多个变量的值。在赋值之前,赋值语句右边的所有表达式将会先进行求值,然后再统一更新左边对应变量的值。这对于处理有些同时出现在元组赋值语句左右两边的变量很有帮助,例如我们可以这样交换两个变量的值:

x, y = y, x
a[i], a[j] = a[j], a[i]
复制代码

和变量声明一样,我们可以用下划线空白标识符_来丢弃不需要的值。

_, err = io.Copy(dst, src) // 丢弃字节数_, ok = x.(T)              // 只检测类型,忽略具体值
复制代码


可赋值性

赋值语句是显式的赋值形式,但是程序中还有很多地方会发生隐式的赋值行为:函数调用会隐式地将调用参数的值赋值给函数的参数变量,一个返回语句会隐式地将返回操作的值赋值给结果变量,一个复合类型的字面量(§4.2)也会产生赋值行为。例如下面的语句:

medals := []string{"gold", "silver", "bronze"}
复制代码

隐式地对 slice 的每个元素进行赋值操作,类似这样写的行为:

medals[0] = "gold"medals[1] = "silver"medals[2] = "bronze"
复制代码

map 和 chan 的元素,虽然不是普通的变量,但是也有类似的隐式赋值行为。

不管是隐式还是显式地赋值,在赋值语句左边的变量和右边最终的求到的值必须有相同的数据类型。更直白地说,只有右边的值对于左边的变量是可赋值的,赋值语句才是允许的。



作者:架构精进之路,十年研发风雨路,大厂架构师,CSDN 博客专家,专注架构技术沉淀学习及分享,职业与认知升级,坚持分享接地气儿的干货文章,期待与你一起成长

关注并私信我回复“01”,送你一份程序员成长进阶大礼包,欢迎勾搭。



Thanks for reading!

发布于: 2 小时前阅读数: 2
用户头像

坚持分享接地气儿的架构技术文章! 2018.02.26 加入

同名微信公众号「架构精进之路」,专注软件架构研究,技术学习与职业成长!坚持原创总结、沉淀和分享,希望能带给大家一些引导和启发,感谢各位的支持(关注、点赞、分享)!

评论

发布
暂无评论
Go 学习笔记之 赋值