「这是我参与2022首次更文挑战的第3天,活动详情查看:2022首次更文挑战」
逻辑运算符
Go语言的逻辑运算符与其他语言并没有什么差别
算术运算符
| 运算符 | 描述 |
|---|---|
| + | 相加 |
| - | 相减 |
| * | 相乘 |
| / | 相除 |
| % | 求余 |
注意: ++(自增)和--(自减)在Go语言中是单独的语句,并不是运算符。 所以说 i++ 是可以的但是 他不能赋值给其他变量。也没有++i
关系运算符
| 运算符 | 描述 |
|---|---|
| == | 检查两个值是否相等,如果相等返回 True 否则返回 False。 |
| != | 检查两个值是否不相等,如果不相等返回 True 否则返回 False。 |
| 检查左边值是否大于右边值,如果是返回 True 否则返回 False。 | |
| >= | 检查左边值是否大于等于右边值,如果是返回 True 否则返回 False。 |
| < | 检查左边值是否小于右边值,如果是返回 True 否则返回 False。 |
| <= | 检查左边值是否小于等于右边值,如果是返回 True 否则返回 False。 |
逻辑运算符
| 运算符 | 描述 | ||
|---|---|---|---|
| && | 逻辑 AND 运算符。 如果两边的操作数都是 True,则为 True,否则为 False。 | ||
| 逻辑 OR 运算符。 如果两边的操作数有一个 True,则为 True,否则为 False。 | |||
| ! | 逻辑 NOT 运算符。 如果条件为 True,则为 False,否则为 True。 |
位运算符
位运算符对整数在内存中的二进制位进行操作。
| 运算符 | 描述 |
|---|---|
| & | 参与运算的两数各对应的二进位相与。 (两位均为1才为1) |
| 丨 | 参与运算的两数各对应的二进位相或。 (两位有一个为1就为1) |
| 参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。 (两位不一样则为1) | |
| << | 左移n位就是乘以2的n次方。 “a<<b”是把a的各二进位全部左移b位,高位丢弃,低位补0。 |
| >> | 右移n位就是除以2的n次方。 “a>>b”是把a的各二进位全部右移b位。 |
赋值运算符
| 运算符 | 描述 |
|---|---|
| = | 简单的赋值运算符,将一个表达式的值赋给一个左值 |
| += | 相加后再赋值 |
| -= | 相减后再赋值 |
| *= | 相乘后再赋值 |
| /= | 相除后再赋值 |
| %= | 求余后再赋值 |
| <<= | 左移后赋值 |
| >>= | 右移后赋值 |
| &= | 按位与后赋值 |
| 丨= | 按位或后赋值 |
| ^= | 按位异或后赋值 |
流程控制
if else 语句
在文本的读取以及条件判断会用到if else语句
基础用法
if 表达式1 {
分支1
} else if 表达式2 {
分支2
} else{
分支3
}
注意:if 后表达式没有 括号
if条件语句也可写成if score := 75; score > 90 {...的格式,这时的score为if内部的局部变量
for循环语句
go 中没有 while 循环 可用for循环代替 for 循环基本格式
for 初始语句;结束条件;条件表达式(递增表达式){
循环体语句
}
go语言中 初始语句,条件表达式,结束语句可以都不存在 1.初始语句,结束条件,条件表达式都存在
func add100() {
var result int
for n := 100; n > 0; n-- {
result += n
}
fmt.Println(result)
}
- 只存在结束条件和条件表达式
func convertToBin(n int) string {
result := ""
for ; n > 0; n /= 2 {
lsb := n % 2
result = strconv.Itoa(lsb) + result
}
return result
}
3.只存在条件表达式
func forDemo3() {
i := 0
for i < 10 {
fmt.Println(i)
i++
}
}
4.都不存在类似while语句
func forToWhile() {
for {
fmt.Println("do .....")
}
}
for循环可以通过break、goto、return、panic语句强制退出循环。
for range 循环
Go语言中可以使用for range遍历数组、切片、字符串、map 及通道(channel)。 通过for range遍历的返回值有以下规律:
- 数组、切片、字符串返回索引和值。
- map返回键和值。
- 通道(channel)只返回通道内的值。
switch case
当语句中存在大量的判断,switch case 可以是一种更加优雅的写法 ,Go语言规定每个switch只能有一个default分支。而且case 会自动break
func switchDemo() {
score := 70
switch {
case score <= 30:
fmt.Println("D")
case score > 30 && score < 60:
fmt.Println("C")
case score >= 90:
fmt.Println("A")
default:
fmt.Println("B")
}
}
fallthrough语法可以执行满足条件的case的下一个case,是为了兼容C语言中的case设计的。
goto
当for循环需要跳出的时候 我们可以使用 break 但是当多循环嵌套时,就显得臃肿。
func gotoDemo() {
for i := 0; i < 10; i++ {
for j := 0; j < 10; j++ {
if j == 2 {
// 设置退出标签
goto breakTag
}
fmt.Printf("%v-%v\n", i, j)
}
}
// 标签
breakTag:
fmt.Println("结束for循环")
}
注意:标签应在循环下方,否则会重复执行循环
break + 标签跳出循环
break语句还可以在语句后面添加标签,表示退出某个标签对应的代码块,标签要求必须定义在对应的for、switch和 select的代码块上。 举个例子:
func breakDemo() {
breakDemo:
for i := 0; i < 10; i++ {
for j := 0; j < 10; j++ {
if j == 2 {
break breakDemo
}
fmt.Printf("%v-%v\n", i, j)
}
}
fmt.Println("...")
}
continue(继续下次循环)
continue语句可以结束当前循环,开始下一次的循环迭代过程,仅限在for循环内使用。
在 continue语句后添加标签时,表示开始标签对应的循环。
总结
流程控制在实际应用中是最常使用的。在实际应用中合理的使用循环,以及goto等特殊语法可以很大的简化开发。