Go程序设计语言2.4 赋值-阿里云开发者社区

开发者社区> 华章计算机> 正文

Go程序设计语言2.4 赋值

简介:
+关注继续查看

2.4 赋值


赋值语句用来更新变量所指的值,它最简单的形式由赋值符=,以及符号左边的变量和右边的表达式组成。

 

每一个算术和二进制位操作符有一个对应的赋值操作符,例如,最后的那个语句可以重写成:

 

它避免了在表达式中重复变量本身。

数字变量也可以通过++和--语句进行递增和递减:

 

2.4.1 多重赋值

另一种形式的赋值是多重赋值,它允许几个变量一次性被赋值。在实际更新变量前,右边所有的表达式被推演,当变量同时出现在赋值符两侧的时候这种形式特别有用,例如,当交换两个变量的值时:

 

或者计算两个整数的最大公约数:

 

或者计算斐波那契数列的第n个数:

 

多重赋值也可以使一个普通的赋值序列变得紧凑:

 

从风格上考虑,如果表达式比较复杂,则避免使用多重赋值形式;一系列独立的语句更易读。

这类表达式(例如一个有多个返回值的函数调用)产生多个值。当在一个赋值语句中使用这样的调用时,左边的变量个数需要和函数的返回值一样多。

 

通常函数使用额外的返回值来指示一些错误情况,例如通过os.Open返回的error类型,或者一个通常叫ok的bool类型变量。我们会在后面的章节中看到,这里有三个操作符也有类似的行为。如果map查询(参考4.3节)、类型断言(参考7.10节)或者通道接收动作(参考8.4.2节)出现在两个结果的赋值语句中,都会产生一个额外的布尔型结果:

 

像变量声明一样,可以将不需要的值赋给空标识符:

 

2.4.2 可赋值性

赋值语句是显式形式的赋值,但是程序中很多地方的赋值是隐式的:一个函数调用隐式地将参数的值赋给对应参数的变量;一个return语句隐式地将return操作数赋值给结果变量。复合类型的字面量表达式,例如slice(参考4.2节):

 

隐式地给每一个元素赋值,它可以写成下面这样:

 

map和通道的元素尽管不是普通变量,但它们也遵循相似的隐式赋值。

不管隐式还是显式赋值,如果左边的(变量)和右边的(值)类型相同,它就是合法的。通俗地说,赋值只有在值对于变量类型是可赋值的时才合法。

可赋值性根据类型不同有着不同的规则,我们将会在引入新类型的时候解释相应的规则。对已经讨论过的类型,规则很简单:类型必须精准匹配,nil可以被赋给任何接口变量或引用类型。常量(参考3.6节)有更灵活的可赋值性规则来规避显式的转换。

两个值使用==和!=进行比较与可赋值性相关:任何比较中,第一个操作数相对于第二个操作数的类型必须是可赋值的,或者可以反过来赋值。与可赋值性一样,我们也将解释新类型的可比较性的相关规则。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
从一个实际的例子触发,理解什么是 Rxjs 的 defer 函数
从一个实际的例子触发,理解什么是 Rxjs 的 defer 函数
5 0
你以为这样写Java代码很6,但我看不懂
你以为这样写Java代码很6,但我看不懂
6 0
不同编程语言在发生stackoverflow之前支持的调用栈最大嵌套层数
不同编程语言在发生stackoverflow之前支持的调用栈最大嵌套层数
3 0
关于 SAP 电商云 Spartacus UI checkout 流程的一些讨论
关于 SAP 电商云 Spartacus UI checkout 流程的一些讨论
4 0
从一个实际的例子触发,理解什么是 Rxjs 的 defer 函数
从一个实际的例子触发,理解什么是 Rxjs 的 defer 函数
4 0
将博客从Hexo迁移至Hugo
自从了解了Github Pages这种静态博客后,开始喜欢上这种技术人员才能鼓捣明白的协作方式。自己的博客系统也从最初的Octopress,切换到Hexo,直到最近看到Hugo这种号称全球最快的静态博客系统,被适合技术人员的风格样式所吸引。于是在经历了三天的折腾后,顺利的将Hexo迁移至Hugo中。
5 0
最详细的使用 soapui 消费 SAP Cloud for Customer Web service 的教程
最详细的使用 soapui 消费 SAP Cloud for Customer Web service 的教程
3 0
10059
文章
0
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载