4.(go语言)运算符和流程控制

4.运算符和流程控制

3.1 算术运算符

运算符 术语 示例 结果
+ 10 + 5 15
- 10 - 5 5
* 10 * 5 50
/ 10 / 5 2
% 取模(取余) 10 % 3 1
++ 后自增,没有前自增 a=0; a++ a=1
后自减,没有前自减 a=2; a– a=1

3.2 关系运算符

运算符 术语 示例 结果
== 相等于 4 == 3 false
!= 不等于 4 != 3 true
< 小于 4 < 3 false
> 大于 4 > 3 true
<= 小于等于 4 <= 3 false
>= 大于等于 4 >= 1 true

3.3 逻辑运算符

运算符 术语 示例 结果
! !a 如果a为假,则!a为真;如果a为真,则!a为假。
&& a && b 如果a和b都为真,则结果为真,否则为假。
|| a || b 如果a和b有一个为真,则结果为真,二者都为假时,结果为假。

3.4 位运算符

运算符 术语 说明 示例
& 按位与 参与运算的两数各对应的二进位相与 60 & 13 结果为12
| 按位或 参与运算的两数各对应的二进位相或 60 | 13 结果为61
^ 异或 参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1 60 ^ 13 结果为240
<< 左移 左移n位就是乘以2的n次方。 左边丢弃,右边补0。 4 << 2 结果为16
>> 右移 右移n位就是除以2的n次方。 右边丢弃,左边补位。 4 >> 2 结果为1

3.5 赋值运算符

运算符 说明 示例
= 普通赋值 c = a + b 将 a + b 表达式结果赋值给 c
+= 相加后再赋值 c += a 等价于 c = c + a
-= 相减后再赋值 c -= a 等价于 c = c - a
*= 相乘后再赋值 c *= a 等价于 c = c * a
/= 相除后再赋值 c /= a 等价于 c = c / a
%= 求余后再赋值 c %= a 等价于 c = c % a
<<= 左移后赋值 c <<= 2 等价于 c = c << 2
>>= 右移后赋值 c >>= 2 等价于 c = c >> 2
&= 按位与后赋值 c &= 2 等价于 c = c & 2
^= 按位异或后赋值 c ^= 2 等价于 c = c ^ 2
|= 按位或后赋值 c |= 2 等价于 c = c | 2

3.6 其他运算符

运算符 术语 示例 说明
& 取地址运算符 &a 变量a的地址
* 取值运算符 *a 指针变量a所指向内存的值

3.7 运算符优先级

在Go语言中,一元运算符拥有最高的优先级,二元运算符的运算方向均是从左至右。

下表列出了所有运算符以及它们的优先级,由上至下代表优先级由高到低:

优先级 运算符
7 ^ !
6 / % << >> & &^
5 + - | ^
4 == != < <= >= >
3 <-
2 &&
1 ||

4.流程控制

Go语言支持最基本的三种程序运行结构:顺序结构、选择结构、循环结构。

顺序结构:程序按顺序执行,不发生跳转。

选择结构:依据是否满足条件,有选择的执行相应功能。

l循环结构:依据条件是否满足,循环多次执行某段代码。

4.1.1 if 语句

4.1.1.1 if

	var a int = 3
    if a == 3 { //条件表达式没有括号
        fmt.Println("a==3")
    }
    //支持一个初始化表达式, 初始化字句和条件表达式直接需要用分号分隔
    if `{
        fmt.Println("b==3")
    }

4.1.1.2 if … else

 	if a := 3; a == 4 {//当两个条件都成立的时候为真的
        fmt.Println("a==4")
    } else { //左大括号必须和条件语句或else在同一行
        fmt.Println("a!=4")
    }

4.1.1.3 if …else if …else

	if a := 3; a > 3 {  
        fmt.Println("a>3")
    } else if a < 3 {
        fmt.Println("a<3")
    } else if a == 3 {
        fmt.Println("a==3")
    } else {
        fmt.Println("error")
    }

4.1.2 switch语句

Go里面switch默认相当于每个case最后带有break,匹配成功后不会自动向下执行其他case,而是跳出整个switch, 但是可以使用fallthrough强制执行后面的case代码:

 	var score int = 90 //设置的数据
	//进行switch的选择
    switch score {
    case 90://90的时候
        fmt.Println("优秀")
        //fallthrough
    case 80: //80的时候
        fmt.Println("良好")
        //fallthrough
    case 50, 60, 70:  //50.60,70的时候
        fmt.Println("一般")
        //fallthrough
    default: //其它的时候
        fmt.Println("差")
    }

可以使用任何类型或表达式作为条件语句:

 	//1
    switch s1 := 90; s1 { //初始化语句;条件
    case 90:
        fmt.Println("优秀")
    case 80:
        fmt.Println("良好")
    default:
        fmt.Println("一般")
    }

    //2
    var s2 int = 90
    switch { //这里没有写条件
    case s2 >= 90: //这里写判断语句
        fmt.Println("优秀")
    case s2 >= 80:
        fmt.Println("良好")
    default:
        fmt.Println("一般")
    }

    //3
    switch s3 := 90; { //只有初始化语句,没有条件
    case s3 >= 90: //这里写判断语句
        fmt.Println("优秀")
    case s3 >= 80:
        fmt.Println("良好")
    default:
        fmt.Println("一般")
    }

4.2 循环语句

4.2.1 for

	var i, sum int // 设置i,sum,的数据为int
    for i = 1; i <= 100; i++ { //进行100次
        sum += i  
    }
    fmt.Println("sum = ", sum)
	//打印数据

4.2.2 range

关键字 range 会返回两个值,第一个返回值是元素的数组下标,第二个返回值是元素的值:

	 s := "abc"
    for i := range s { //支持 string/array/slice/map。
        fmt.Printf("%c\n", s[i])
    }

    for _, c := range s { // 忽略 index
        fmt.Printf("%c\n", c)
    }

    for i, c := range s {
        fmt.Printf("%d, %c\n", i, c)
    }

4.3 跳转语句

4.3.1 break和continue

在循环里面有两个关键操作break和continue,break操作是跳出当前循环,continue是跳过本次循环。

	for i := 0; i < 5; i++ {
        if 2 == i {
            //break    //break操作是跳出当前循环
            continue //continue是跳过本次循环
        }
        fmt.Println(i)
    }

注意:break可⽤于for、switch、select,⽽continue仅能⽤于for循环。


4.3.2 goto

用goto跳转到必须在当前函数内定义的标签:
func main() {
    for i := 0; i < 5; i++ {
        for {
            fmt.Println(i)
            goto LABEL //跳转到标签LABEL,从标签处,执行代码
        }
    }

    fmt.Println("this is test")
//设置跳转到的函数
LABEL:
    fmt.Println("it is over")
}

猜你喜欢

转载自blog.csdn.net/weixin_44908159/article/details/106696671