Golang - Part03 运算符和流程控制
Golang - Part03 运算符和流程控制
本文使用Chatgpt辅助生成
运算符
算术运算符
包括加(+)、减(-)、乘(*)、除(/)和取模(%)等。其中,加号还可以用于字符串连接。
1 |
|
自增和自减不是运算符,只能作为独立语句使用,不能用于表达式,不能放在变量名前面使用。通过代码,我们演示 ++ 和 – 的用法。
1
2
3
4
5
6
7
8
9
10 func main() {
a := 10
b := 5
a++
b--
fmt.Println("a++:", a)
fmt.Println("b--:", b)
}
//a++: 11
//b--: 4
比较运算符
用于比较两个值的大小关系,包括等于(==)、不等于(!=)、大于(>)、小于(<)、大于等于(>=)和小于等于(<=)等。
1 | func main() { |
逻辑运算符
逻辑运算符:包括逻辑与(&&)、逻辑或(||)和逻辑非(!)等。其中,逻辑与和逻辑或都是短路运算符,也就是说,如果第一个操作数能够确定结果,则不会对第二个操作数进行求值
代码参考上方
位运算符
按照二进制位进行运算,包括按位与(&)、按位或(|)、按位异或(^)、左移(<<)和右移(>>)等
位运算符通常用于处理底层或者二进制数据,例如在实现网络协议、文件格式等领域。需要注意位运算符可能存在的溢出问题和操作数类型的问题。
位运算符是一种基于二进制位进行操作的运算符,主要包括以下几种:
- 按位与(&):将两个操作数的每个对应位上的值都取出来,进行“与”运算,返回一个新的二进制数。
- 按位或(|):将两个操作数的每个对应位上的值都取出来,进行“或”运算,返回一个新的二进制数。
- 按位异或(^):将两个操作数的每个对应位上的值都取出来,进行“异或”运算,返回一个新的二进制数。
- 左移(<<):将左操作数的二进制表示向左移动指定的位数,右边用 0 填充;返回一个新的二进制数。
- 右移(>>):将左操作数的二进制表示向右移动指定的位数,左边用原来的数值填充;返回一个新的二进制数。
赋值运算符
用于给变量赋值,包括简单赋值(=)、加等于(+=)、减等于(-=)、乘等于(*=)、除等于(/=)、取模等于(%=)、按位与等于(&=)、按位或等于(|=)、按位异或等于(^=)、左移等于(<<=)和右移等于(>>=)等
1 | func main() { |
其他运算符
- 取地址(
&
):取地址运算符(&)可以获取变量的内存地址。例如,&a 表示变量 a 的地址。 - 取值(
*
):取值运算符(*)用于获取指针指向的变量的值。例如,如果 p 是一个指向整型变量的指针,则 *p 表示该变量的值。 - 三元运算符(
?:
):三元条件运算符(? :)是一种简短的条件语句形式,它通常用于根据条件来选择两个值中的一个。语法为 condition ? value1 : value2,其中 condition 是一个布尔表达式,value1 和 value2 分别是两个可能的返回值。如果 condition 为 true,则返回 value1,否则返回 value2。
流程控制
if/else语句
if语句用于判断一个条件是否成立,如果成立则执行相应的代码块,否则执行else语句中的代码块。if语句还可以嵌套使用,形成if/else if/else结构。
1 | func main() { |
if/else语句区别于其它语言,它在条件表达式中,支持初始化语句,可以定义局部变量(一个或多个)或执行初始化函数。其中,局部变量的有效范围包含整个if/else块。通过代码,我们演示 if/else在条件表达式中初始化语句的使用方法。
1 | func main() { |
for循环
for循环 for循环用于重复执行某段代码,直到指定的条件满足为止。Go语言中for循环有:for 循环、for range循环和无限循环等。
1 |
|
switch语句
switch 语句和 if 语句类似,也用于选择执行,在 Go 语言中,switch 语句不同于其他语言中的 switch 语句,匹配到 case 块后,不需要显式执行 break 语句,程序自动不会继续执行下个 case 块,如果需要程序继续执行匹配 case 块的下一个 case 块,可以在 case 块的结尾执行 fallthrough
,但是不会再匹配 case 块的条件表达式。如果想要阻止 fallthrough
,可以显式执行 break 语句。在一个 case 块存在多个匹配条件时,命中其中一个条件即可,类似逻辑运算符“或”,通过代码,我们演示 switch 在 Go 语言中的使用方法。
1 |
|
除了常规的switch语句外,Go语言还提供了一种特殊的形式,即在switch表达式中省略表达式。这种形式的switch语句可以用来简化大量的if/else if结构。
1 | switch { |
continue、break和goto
continue
用于跳过当前循环中剩余的语句,直接进入下一次循环。例如:
1 | for i := 0; i < 10; i++ { |
上述代码将输出所有奇数(1, 3, 5, 7, 9),因为当 i 为偶数时,continue
跳过了 fmt.Println(i)
这条语句。
break
用于结束当前循环或 switch 语句。例如:
1 | for i := 0; i < 10; i++ { |
上述代码将输出 0 到 4(不包括 5),因为当 i 等于 5 时,break
终止了循环。另外,当 switch 语句匹配到 “Bob” 后,break
也会终止 switch 语句。
goto
用于无条件地转移到被标记的语句。例如:
1 | for i := 0; i < 10; i++ { |
上述代码将输出 0 到 4,然后跳转到 Label
标记处执行。在实际开发中,由于滥用 goto
可能导致代码难以理解和维护,因此 Go 语言鼓励使用结构化的控制流程,避免使用 goto
。