正文
其实和很多语言都是类似的,go语言也是有运算符、条件语句和循环语句。
运算符(这一点和c相同)
Go 语言内置的运算符:
-
算术运算符
-
关系运算符
-
逻辑运算符
-
位运算符
-
赋值运算符
-
=、+=、-=、*=、/=、%=、<<=、>>=、&=、^=、!=
-
其他运算符
当然,运算符也是有优先级的。
条件语句
正如其他语言,go中也存在一下条件语句:
-
if
-
if ··· else
-
if ··· else if ··· else
-
if (if ··· [(else if)、(if)])
-
switch () { case value1: ··· [fallthrough] ··· }
-
select
注意,在这里我们除了常规的if语句操作相同以外,其他都是类似。
switch注意点如下:
-
左花括号{必须与switch处于同一行
-
条件表达式不限制为常量或者整数
-
单个case中,可以出现多个结果选项
-
与C语言等规则相反,Go语言不需要用break来明确退出一个case
-
只有在case中明确添加fallthrough关键字,才会继续执行紧跟的下一个case
-
可以不设定switch之后的条件表达式,在此种情况下,整个switch结构与多个if...else...的逻辑作用等同
select注意点如下:
-
elect 的代码形式和 switch 非常相似
-
每个case都必须是一个通信
-
所有channel表达式都会被求值
-
所有被发送的表达式都会被求值
-
如果任意某个通信可以进行,它就执行;其他被忽略。否则如下:
-
如果有多个case都可以运行,Select会随机公平地选出一个执行。
-
如果有default子句,则执行该语句。
-
如果没有default字句,select将阻塞,直到某个通信可以运行;Go不会重新对channel或值进行求值。
选择语句
-
for init; condition; post { } (和 C 语言的 一般for 一样)
-
for condition { } (和 C 的 while 一样)
-
for { } ==> (跟C语言for(;;){} 相同)
-
init: 一般为赋值表达式,给控制变量赋初值;
-
condition: 关系表达式或逻辑表达式,循环控制条件;
-
post: 一般为赋值表达式,给控制变量增量或减量。
-
for 循环的 range 格式可以对 slice、map、数组、字符串等进行迭代循环。
-
for key, value := range oldMap {
newMap[key] = value
}
注意,for循环条件控制器是无需括号的,循环体需要花括号包裹,循环变量、循环调教、循环变量变化量之间用 ; 分割。
demo如下:
package main
import (
"fmt"
)
func main() {
numbers := [6]int{1, 2, 3, 5}
for i := range numbers {
fmt.Printf("第 %d 位 x 的值 = %d\n", i, numbers[i])
}
fmt.Println("====我是分割线====")
for i, x := range numbers {
fmt.Printf("第 %d 位 x 的值 = %d\n", i, x)
}
fmt.Println("====我是分割线====")
for a := 0; a < len(numbers); a++ {
fmt.Printf("第 %d 位 x 的值 = %d\n", a, numbers[a])
}
}
当然我们能够小小的推测一下结果,这里直接贴出结果如下:
第 0 位 x 的值 = 1
第 1 位 x 的值 = 2
第 2 位 x 的值 = 3
第 3 位 x 的值 = 5
第 4 位 x 的值 = 0
第 5 位 x 的值 = 0
====我是分割线====
第 0 位 x 的值 = 1
第 1 位 x 的值 = 2
第 2 位 x 的值 = 3
第 3 位 x 的值 = 5
第 4 位 x 的值 = 0
第 5 位 x 的值 = 0
====我是分割线====
第 0 位 x 的值 = 1
第 1 位 x 的值 = 2
第 2 位 x 的值 = 3
第 3 位 x 的值 = 5
第 4 位 x 的值 = 0
第 5 位 x 的值 = 0
当然,我们说到循环,不得不提一下循环控制语句,如下: