3 运算符
3 运算符
Go 内置运算符:
- 算术运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 赋值运算符
算术运算符
运算符 | |
---|---|
+ | 相加 |
- | 相减 |
* | 相乘 |
/ | 相除 |
% | 求余 |
注意:++
和--
是Go中单独的语句,而非运算符
关系运算符
运算符 | 描述 |
---|---|
== | 是否相等 |
!= | 是否不相等 |
> | 左边值是否大于右边值 |
>= | 左边值是否大于等于右边值 |
< | 左边值是否小于右边值 |
<= | 左边值是否小于等于右边值 |
逻辑运算符
运算符 | 描述 |
---|---|
&& | 逻辑AND运算符 |
|| | 逻辑OR运算符 |
! | 逻辑NOT运算符 |
位运算符
- 位运算符 对整数在内存中的二进制位 进行操作
运算符 | 描述 |
---|---|
& | 参与运算的两数各对应的二进制位 相与(两位均为1 才为1) |
| | 参与运算的两数各对应的二进制位 相或(两位有一个为1 就为1) |
^ | 参与运算的两数各对应的二进制位 相异或(两位相异 则为1) |
<< | 左移n位,即乘以2^n |
>> | 右移n位,即除以2^n |
赋值运算符
运算符 | 描述 |
---|---|
= | 将表达式的值赋给一个左值 |
+= | 相加后在赋值 |
-= | |
*= | |
/= | |
%= | |
<<= | 左移后赋值 |
>>= | 右移后赋值 |
&= | 按位与后赋值 |
|= | 按位或后赋值 |
^= | 按位异或后赋值 |
练习题
有一堆数字,如果除了一个数字以外,其他数字都出现了两次,那么如何找到出现一次的数字?
目前能想到的是暴力遍历:
*
4 流程控制
- 流程控制是每种语言控制逻辑走向和执行次序的重要部分
- Go 中有
if
和for
, 而switch
和goto
主要是为了简化代码、降低重复代码而生,属于扩展类的流程控制
if else分支结构
if 条件判断的基本写法
if 条件判断格式
- ```go
if expr1{
}else if expr2{block1
}else {block2
}block3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
* ==注意:==Go 规定,`if`的**左括号**必须与`if expr`放于同一行;**右括号必须与下一个语句在同一行**
#### if 条件判断特殊写法
* 可以在 if 表达式前添加一个执行语句,再根据变量值判断
* 示例:
* ```go
package main
import "fmt"
func main() {
if score := 65; score >= 90 {
fmt.Println("A")
} else if score > 75 {
fmt.Println("B")
} else {
fmt.Println("C")
}
}
- ```go
思考:区别可能就是作用域不同
for 循环结构
Go 语言中的所有循环类型都可以使用关键字
for
完成基本格式:
1
2
3for 初始语句; 循环条件表达式; 结束语句{
循环体
}当
循环条件表达式
为true
时进行循环,直到为false
for 循环的
初始语句
可以被省略,但是分号必须要写for ;i<10;i++
for 循环的初始语句和结束语句都可以被省略, 此时不需要分号
- 类似于C中的关键词
while
for i<10
- 类似于C中的关键词
无限循环
```
for {循环体
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
* 可以通过关键字`break` `goto` `return` `panic`强制退出循环
### for range 键值循环
* 可以使用 `for range` 遍历 数组、切片、字符串、map以及通道
* 数组、切片、字符串 返回 `索引`和`值`
* map 返回`键`和`值`
* 通道 只返回`通道内的值`
### switch case
* 对大量值进行条件判断
* ```go
i := 1
switch(i){
case 1:
block1
case 2:
block2
default :
block3
}Go 规定,只能有一个
default
分支一个分支可以有多个值,多个case值使用逗号分开
case 1, 3, 5:
分支可以使用表达式判断:
case age<25:
fallthrough
语法可以执行满足条件的 case 的下一个 case,为了兼容 C 中的case- ```go
func switchDemo5() {
}s := "a" switch { case s == "a": fmt.Println("a") fallthrough case s == "b": fmt.Println("b") case s == "c": fmt.Println("c") default: fmt.Println("...") }
1
2
3
4
* ```
a
b
- ```go
goto 跳转到指定标签
goto
通过标签进行代码间的无条件跳转- 可以在快速跳出循环、避免重复退出上有一定的帮助
*
1 | func gotoDemo2() { |
break 跳出循环
结束
for
、switch
、select
的代码块可以在
break
语句后面添加标签:退出某个标签对应的代码块标签必须定义在对应的
for
、switch
、select
的代码块上- ```go
func breakDemo1() {
BREAKDEMO1:
}for i := 0; i < 10; i++ { for j := 0; j < 10; j++ { if j == 2 { break BREAKDEMO1 } fmt.Printf("%v-%v\n", i, j) } } fmt.Println("...")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
### continue 继续下次循环
* continue 语句: 结束当前循环,开始下一次循环,仅限在`for`循环内使用
* 在`continue` 语句后添加标签时,表示开始标签对应的循环
* ```go
func continueDemo() {
forloop1:
for i := 0; i < 5; i++ {
// forloop2:
for j := 0; j < 5; j++ {
if i == 2 && j == 2 {
continue forloop1
}
fmt.Printf("%v-%v\n", i, j)
}
}
}
- ```go
练习题
编写代码打印 99 乘法表
package main import "fmt" func main() { for i := 1; i <= 10; i++ { for j := 1; j <= 10; j++ { fmt.Printf("%d * %d = %d ", i, j, i*j) } fmt.Println() } }
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment