if…else…
在 Go 语言中,if 关键字的作用和其它大部分语言相同,用于测试某个布尔表达式或布尔是否为真;若为真则执行 if 之后 {} 中的语句,否则跳过这些语句;如果存在第二分支,则需要使用 else 关键字,还需要增加分支的话就需要使用 else if。
需要注意的是 Go 语言中的 if 后面不需要加括号。
if v > 100 {
return 100
} else if v < 0 {
return 0
} else {
return v
}
在 Go 语言中,if 还有一种特别的写法,可以在条件表达式之前写一个赋值表达式,类似于 for 循环语句。
func readFile(filename string) {
if contents, err := os.ReadFile(filename); err != nil {
fmt.Println(err)
} else {
fmt.Printf("%s\n", contents)
}
}
swich …case…
Go 语言对 switch…case… 的功能进行了扩展,它变得更加的通用。switch 之后可以什么都不带。case 也无需是一个固定值,也可以是一个布尔表达式,而且每一个 case 都是一个 独立的代码块,执行完了之后立刻跳出 switch,不需要使用 break。
使用 fallthrough 关键字可以在已经执行完成的 case 之后,把控制权转移到下一个 case 的执行代码中,需要注意的是,fallthrough 不会检查下一个 case 的条件是否成立。
func main() {
num := 2
switch num {
case 1:
fmt.Println("数字是1")
case 2:
fmt.Println("数字是2")
default:
fmt.Println("数字不是1也不是2")
}
}
for…
在 Go 语言中,for 之后一样可以跟三个语句,单次表达式;条件表达式;末尾循环体,但是它不需要使用 () 来包裹这三个表达式,写法上更加的简洁。同时它也和其它语言一样,可以任意省略这三个表达式。
// 基本结构
func main() {
sum := 0
for i := 1; i <= 100; i++ {
sum += i
}
fmt.Println(sum)
}
// 省略单次表达式
func convertToBin(n int) string {
result := ""
for ; n > 0; n /= 2 {
lsb := n % 2
result = strconv.Itoa(lsb) + result
}
return result
}
// 省略末尾循环体
func printFile(filename string) {
file, err := os.Open(filename)
if err != nil {
panic(err)
}
scanner := bufio.NewScanner(file)
for scanner.Scan() {
fmt.Println(scanner.Text())
}
}
// 全部省略就是死循环
func forever() {
for {
fmt.Print("abc")
}
}
在 for 循环中可以使用 break 和 continue 关键字来跳出或跳过循环;
break :提前结束 for 循环,之后程序会将在 for 循环下一行代码开始执行;
continue :跳过 for 循环中当前这次循环,执行下一次循环;
在循环体中使用 break 和 continue 时,要特别小心,确保程序的正确性,不恰当的使用可能会导致逻辑混乱及死循环等问题。
func main() {
a := 0
for {
fmt.Println(a)
a++
if a == 10 {
break
}
}
b := 0
for b <= 10 {
fmt.Println(b)
b += 2
if b % 2 != 0 {
continue
}
}
}