📅 2024年4月28日
📦 使用版本为 1.21.5
条件判断和循环判断
If/switch条件判断
⭐️ 和其他语言一样拥有 if else if else
和 switch
语句
1️⃣ if else if else
func main() {
score := 90
var ans string
if score >= 0 && score < 60 {
ans = "F"
} else if score < 70 {
ans = "D"
} else if score < 80 {
ans = "C"
} else if score < 90 {
ans = "B"
} else if score < 100 {
ans = "A"
} else if score == 100 {
ans = "S"
} else {
ans = "nil"
}
fmt.Println(ans)
}
2️⃣ if
语句可以包含一些简单的语句
func main() {
if x := 3 + 1; x > 3 {
fmt.Print(x)
}
}
3️⃣ Switch
⭐️ 有一个 default
,当前面条件都不满足就执行
func main() {
test := 'a'
switch test {
case 'a':
fmt.Println("a")
case 'b':
fmt.Println("b")
case 'c':
fmt.Println("c")
default: //默认情况
fmt.Println("default")
}
}
4️⃣ 在 switch
中也可以写一些简单的语句
func main() {
switch test := 'a'; { //等于 switch test :=a; true
case test == 'a':
fmt.Println("a")
case test == 'b':
fmt.Println("b")
case test == 'c':
fmt.Println("c")
default:
fmt.Println("default")
}
}
5️⃣ 也可以什么都不写
func main() {、
test := 'a'
switch { //等于 switch true
case test == 'a':
fmt.Println("a")
case test == 'b':
fmt.Println("b")
case test == 'c':
fmt.Println("c")
default:
fmt.Println("default")
}
}
6️⃣ 使用 fallthrough
关键字,如果当前分支执行完毕,则继续执行相邻的下一个分支,是直接执行语句,而不是还需要判断
func main() {
test := 'a'
switch { //等于 switch test :=a; true
case test == 'a':
fmt.Println("a")
fallthrough
case test == 'b':
fmt.Println("b")
case test == 'c':
fmt.Println("c")
default:
fmt.Println("default")
}
}
//输出
a
b
7️⃣ 它还可以包含多个表达式
package main
import (
"fmt"
)
func main() {
letter := "i"
switch letter {
case "a", "e", "i", "o", "u": // 一个选项多个表达式
fmt.Println("vowel")
default:
fmt.Println("not a vowel")
}
}
lable和goto
⭐️ 标签语句,给一个代码块打上标签,可以是 goto
,break
,continue
的目标
func main() {
A:
println('A') //两个代码块,
B:
println('B')
}
⭐️ 使用 goto
将控制权传递给在同一函数中对应标签语句,但是在它使用的很少跳来跳去很麻烦,性能消耗也是一个问题
func main() {
a := 1
if a == 1 {
goto A
} else {
fmt.Println("b")
}
A:
fmt.Println("a")
}
For循环
⭐️ 在Go中,仅有一种循环语句:for
,Go抛弃了 while
语句,for
语句可以被当作 while
来使用
1️⃣ 语法
func main() {
for i := 0; i < 10; i++ {
println(i) //输出0-9的数字
}
}
2️⃣ 它可以同时声明多个变量,但是不能有多个循环后操作
func main() {
for j, i := 0, 0; i < 10 || j > 1; i++ {
println(i, j)
}
}
3️⃣ 当成 while
func main() {
for i := 1; i < 100; {
println(i)
}
}
//或者
func main() {
i := 1;
for i < 100{
println(i)
}
}
4️⃣ 其他的 break
和 continue
,就不用多说了
📝 实验:九九乘法表
func main() {
//九九乘法表
for i := 1; i <= 9; i++ {
for j := 1; j <= 9; j++ {
if i <= j {
fmt.Printf("%d * %d = %2d ", i, j, i*j)
}
}
fmt.Println()
}
}
⭐️ for range
1️⃣ 它有点类似于 Python
的 for
循环
//语法
for index, value := range iterable {
}
2️⃣ 代码实列
func main() {
str := "Hello World"
for index, value := range str {
fmt.Println(index, value) //打印下标和下标的值
}
}
💡 它对于不同的数据结构,它的实现可能都不同
⚠️注意点:
- 作用于切片是返回元素的下标和元素值
- 作用于
string
,由于string
底层使用UniCode
编码存储字符,字符肯占用1-4个字节,所以下标可能不连续 - 作用于
map
则返回每个元素的key
和value
- 作用于
channel
,会返回channel
中所有元素,如果channel
没有元素了for-range
则会被阻塞,如果channel
本身就是nil
,则会直接阻塞