1.运算符
算数运算符:加减乘除、%取余、++自增 、–自减
关系运算符: ==、!=、>、 < 、>=、 <=
逻辑运算符: && 、||、 !
位运算符: & 、| 、^ 、<<、 >>
赋值运算符:
运算符 | 描述 |
---|---|
= | 简单的赋值运算符,将一个表达式的值赋给一个左值 |
+= | 相加后再赋值 |
-= | 相减后再赋值 |
*= | 相乘后再赋值 |
/= | 相除后再赋值 |
%= | 求余后再赋值 |
<<= | 左移后赋值 |
>>= | 右移后赋值 |
&= | 按位与后赋值 |
^= | 按位异或后赋值 |
优先级
- / % << >> & &^ + - | ^ == != < <= > >= && ||
2.控制语句
2.1条件语句
2.1.1 if语句
IF 语句由一个布尔表达式后紧跟一个或者多个语句组成另外Go没有三元运算符*? : 😦
if a== b {
fmt.Println(a, b, ConstC, c1, c2, c3)
} else {
fmt.Println("没有匹配到")
}
2.1.2 switch语句
switch默认情况下case 最后自带break语句,匹配成功后不会执行其他case,如果我们需要执行后面的case,可以使用fallthrough。
fallthrough:强制执行后面的case语句
switch a {
case 123:
fmt.Println("轮到我执行了")
fallthrough
case 234:
fmt.Println("我是被强制执行的")
default:
fmt.Println("都没人执行的话,就轮到我上场啦")
}
2.1.3 select语句
- 每个case都必须是一个通信
- 都有channel表达式都会被求值
- 所有被发送的表达式都会被求职
- 如果任意某个通信可以进行,它就执行,其他被忽略。
- 如果有多个 case 都可以运行,Select 会随机公平地选出一个执行。其他不会执行。 否则:
- 如果有 default 子句,则执行该语句。
-如果没有 default 子句,select 将阻塞,直到某个通信可以运行;Go 不会重新对 channel 或值进行求值。
- 如果有 default 子句,则执行该语句。
select {
case communication clause :
statement(s);
case communication clause :
statement(s);
default : // 可选
statement(s);
}
2.2 循环语句
2.2.1 for 循环
- for init; condition; post { }
- //for for condition { } //while
- for {}
init: 一般为赋值表达式,给控制变量赋初值;
condition: 关系表达式或逻辑表达式,循环控制条件;
post:一般为赋值表达式,给控制变量增量或减量。
//普通循环
for a := 0; a < 10; a++ {
fmt.Printf("我是十次循环中的第 %d 个", a)
}
//遍历数组
arr := []int{1, 2, 3, 4}
for i := range arr {
fmt.Printf("%d", i)
}
//遍历map
hash := map[string]string{"a":"a_value","c":"c_value"}
for key, value := range hash {
fmt.Printf("key值:%s,value值:%s", key, value)
}
2.2.2 嵌套循环
for i:=0; i<10; i++{
for(j=i; j<10; j++){
}
}
2.2.3 循环控制语句
- break语句:
- 用于循环语句中跳出循环,并开始执行循环之后的语句。
- break 在 switch(开关语句)中在执行一条 case 后跳出语句的作用。
- 在多重循环中,可以用标号 label 标出想 break 的循环。
- continue语句:跳过当前循环的剩余语句,然后继续进行下一轮循环。
- goto:无条件转移到过程中指定行,与条件语句配合,实现条件转移、构成循环、跳出循环体等(不建议用,造成混乱)