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节)有更灵活的可赋值性规则来规避显式的转换。

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

相关文章
|
3月前
|
Go 开发者
深入理解Go语言中的赋值与短声明
【8月更文挑战第31天】
22 0
|
6月前
|
Go
Golang深入浅出之-Go语言基础语法:变量声明与赋值
【4月更文挑战第20天】本文介绍了Go语言中变量声明与赋值的基础知识,包括使用`var`关键字和简短声明`:=`的方式,以及多变量声明与赋值。强调了变量作用域、遮蔽、初始化与零值的重要性,并提醒读者注意类型推断时的一致性。了解这些概念有助于避免常见错误,提高编程技能和面试表现。
80 0
|
存储 编译器 Go
100天精通Golang(基础入门篇)——第4天: Go语言中的变量与常量详解:声明、赋值和使用
100天精通Golang(基础入门篇)——第4天: Go语言中的变量与常量详解:声明、赋值和使用
71 0
Go-运算符总结(算术、关系、逻辑、赋值、位运算符等)
Go-运算符总结(算术、关系、逻辑、赋值、位运算符等)
75 0
Go-运算符总结(算术、关系、逻辑、赋值、位运算符等)
|
编译器 Go C语言
Go 专栏 | 变量和常量的声明与赋值
上篇文章介绍了环境搭建,并完成了学习 Go 的第一个程序 Hello World。这篇文章继续学习 Go 的基础知识,来看看变量,常量的声明与赋值。
215 0
Go 专栏 | 变量和常量的声明与赋值
|
存储 程序员 编译器
Go+赋值运算、字符串、切片
赋值运算符就是可以直接进行赋值的一种运算符
198 0
下一篇
无影云桌面