跳至主要內容

5.控制结构

Cillian...大约 3 分钟数据布局

Go语言中控制结构的掌握:带例子的指南

在编程中,使用各种控制结构来指导执行流程。Go语言提供了一套丰富的控制结构,使得代码的逻辑控制既简洁又高效。在本文中,我们将详细介绍Go语言的几种控制结构,并通过示例和注释来加深理解。

if语句

if 是最基本的控制结构,它允许基于布尔条件来执行代码。Go语言中的 if 语句不需要圆括号包围条件,但是花括号是必须的。

package main

import "fmt"

func main() {
    x := 10
    // 简单的 if 语句
    if x > 5 {
        fmt.Println("x大于5")
    }

    // if-else 结构
    if x%2 == 0 {
        fmt.Println("x是偶数")
    } else {
        fmt.Println("x是奇数")
    }

    // if-else if-else 结构
    if x < 0 {
        fmt.Println("x是负数")
    } else if x == 0 {
        fmt.Println("x是0")
    } else {
        fmt.Println("x是正数")
    }
}

在这个例子中,我们首先检查 x 是否大于5,然后检查它是否是偶数,最后检查它是负数、零还是正数。

for循环

在Go中,for 循环是唯一的循环结构,但它非常灵活,可以以多种方式使用。

基本的for循环

package main

import "fmt"

func main() {
    // 基本的 for 循环
    for i := 0; i < 5; i++ {
        fmt.Printf("i的值为: %d\n", i)
    }
}

这个基本的 for 循环初始化一个计数器 i,然后在 i 小于5的条件下循环,每次循环 i 都会递增。

while风格的for循环

for 循环也可以像传统的 while 循环那样使用。

package main

import "fmt"

func main() {
    // while风格的 for 循环
    j := 0
    for j < 5 {
        fmt.Printf("j的值为: %d\n", j)
        j++
    }
}

在这里,我们省略了初始化和迭代表达式,创建了一个类似 while 的循环。

无限循环

如果省略 for 循环中的所有条件,将创建一个无限循环。

package main

import "fmt"

func main() {
    // 无限循环
    for {
        fmt.Println("这将永远执行")
        // 使用 break 语句退出循环
        break
    }
}

通常,无限循环会与 breakreturn 语句配合使用,以在满足特定条件时退出循环。

switch语句

switch 语句是一个多分支选择结构,它提供比 if-else 更清晰的选择逻辑。

package main

import "fmt"

func main() {
    number := 3
    // 基本的 switch 语句
    switch number {
    case 1:
        fmt.Println("数字是1")
    case 2:
        fmt.Println("数字是2")
    case 3:
        fmt.Println("数字是3")
    default:
        fmt.Println("数字大于3")
    }
}

在这个 switch 语句的例子中,我们根据 number 的值来打印不同的信息。default 分支会在没有任何其他分支匹配时执行。

select语句

select 语句是Go中一个独特的结构,它主要用于通道(channel)的通信操作。它可以监听多个通道上的数据流动。

package main

import (
    "fmt"
    "time"
)

func server1(ch chan string) {
    time.Sleep(6 * time.Second)
    ch <- "来自服务器1"
}

func server2(ch chan string) {
    time.Sleep(3 * time.Second)
    ch <- "来自服务器2"
}

func main() {
    output1 := make(chan string)
    output2 := make(chan string)
    go server1(output1)
    go server2(output2)
    // 使用 select 监听两个通道
    select {
    case s1 := <-output1:
        fmt.Println(s1)
    case s2 := <-output2:
        fmt.Println(s2)
    }
}

在这个例子中,我们启动了两个goroutine来模拟两个服务器的响应。select 语句用于等待这两个通道中的第一个响应,并打印它。

控制结构是Go编程中的基础。通过这些示例和解释,你应该能更好地理解它们的用法并在你自己的代码中灵活运用它们。记住,实践是最好的老师,所以不断地尝试和练习将帮助你深化这些概念。