Go语言入门指南(三): 控制结构和循环

文章创作不易,麻烦大家点赞关注转发一键三连。也可以关注文章结尾后我的公众号与我联系。


在前两篇文章中,我们已经完成了Go语言开发环境的搭建,编写了第一个"Hello, World"程序,并初步了解了Go语言中的变量和数据类型。在这篇文章中,我们将继续深入探讨Go语言的控制结构,包括条件语句、循环语句和switch语句。通过这些内容,你将能够编写更加复杂和实用的Go程序。

控制结构

控制结构是编程语言中用于控制程序执行流程的语句。Go语言提供了常见的控制结构,如条件语句、循环语句和switch语句。条件语句

Go语言中的条件语句主要包括if、else if和else。下面是一个简单的例子:

Go 复制代码
package main
import "fmt"

func main() {
    num := 10
    if num > 0 {
        fmt.Println("Number is positive")
    } else if num < 0 {
        fmt.Println("Number is negative")
    } else {
        fmt.Println("Number is zero")
    }
}

在这个例子中,我们根据变量num的值输出不同的信息。if语句用于判断条件是否为真,如果为真则执行相应的代码块。else if和else则用于处理其他情况。

循环语句

Go语言中的循环语句主要通过for关键字实现。Go语言没有while循环,但可以通过for循环实现类似的功能。

基本for循环

for循环的基本语法如下:

Go 复制代码
package main
import "fmt"

func main() {
    for i := 0; i < 5; i++ {
        fmt.Println("Iteration", i)
    }
}

在这个例子中,for循环的语法包括三个部分:

初始化语句:i := 0,在循环开始前执行,通常用于初始化循环变量。

条件语句:i < 5,在每次迭代前检查,如果为真则继续循环。

后置语句:i++,在每次迭代后执行,通常用于更新循环变量。

无限循环

在某些情况下,我们可能需要创建一个无限循环。在Go语言中,可以通过省略for循环的条件语句来实现:

Go 复制代码
package main
import "fmt"

func main() {
    i := 0
    for {
        fmt.Println("Infinite loop iteration", i)
        i++
        if i >= 5 {
            break
        }
    }
}

在这个例子中,我们创建了一个无限循环,并通过break语句在满足条件时退出循环。

for循环的简化形式

Go语言中的for循环还可以省略初始化语句和后置语句,只保留条件语句,从而实现类似while循环的功能:

Go 复制代码
package main
import "fmt"

func main() {
    i := 0
    for i < 5 {
        fmt.Println("Iteration", i)
        i++
    }
}

在这个例子中,for循环只保留了条件语句i < 5,从而实现了一个简单的while循环。

for range循环

for range循环是Go语言中用于遍历数组、切片、字符串、映射和通道的一种简洁方式。它的语法如下:

Go 复制代码
package main
import "fmt"

func main() {
    // 遍历数组或切片
    nums := []int{1, 2, 3, 4, 5}
    for index, value := range nums {
        fmt.Printf("Index: %d, Value: %d\n", index, value)
    }

    // 遍历字符串
    str := "Hello, Go!"
    for index, char := range str {
        fmt.Printf("Index: %d, Character: %c\n", index, char)
    }

    // 遍历映射
    m := map[string]int{"a": 1, "b": 2, "c": 3}
    for key, value := range m {
        fmt.Printf("Key: %s, Value: %d\n", key, value)
    }
}

在这个例子中,我们使用for range循环遍历了一个切片、一个字符串和一个映射。对于切片和字符串,range返回索引和值;对于映射,range返回键和值。

如果只需要索引或键,可以忽略值:

Go 复制代码
package main
import "fmt"

func main() {
    nums := []int{1, 2, 3, 4, 5}
    for index := range nums {
        fmt.Println("Index:", index)
    }

    m := map[string]int{"a": 1, "b": 2, "c": 3}
    for key := range m {
        fmt.Println("Key:", key)
    }
}

如果只需要值,可以使用下划线_忽略索引或键:

Go 复制代码
package main
import "fmt"

func main() {
    nums := []int{1, 2, 3, 4, 5}
    for _, value := range nums {
        fmt.Println("Value:", value)
    }
}

switch语句

switch语句是另一种常见的控制结构,用于根据变量的值执行不同的代码块。Go语言中的switch语句非常灵活,支持多种用法。

基本switch语句

下面是一个基本的switch语句示例:

Go 复制代码
package main
import "fmt"

func main() {
    day := "Monday"
    switch day {
    case "Monday":
        fmt.Println("Today is Monday")
    case "Tuesday":
        fmt.Println("Today is Tuesday")
    default:
        fmt.Println("Today is another day")
    }
}

在这个例子中,switch语句根据变量day的值执行不同的代码块。如果day的值是"Monday",则输出"Today is Monday";如果day的值是"Tuesday",则输出"Today is Tuesday";否则,执行default分支。

多条件switch语句

Go语言中的switch语句还支持多个条件匹配。例如:

Go 复制代码
package main
import "fmt"

func main() {
    day := "Wednesday"
    switch day {
    case "Monday", "Tuesday", "Wednesday", "Thursday", "Friday":
        fmt.Println("It's a weekday")
    case "Saturday", "Sunday":
        fmt.Println("It's a weekend")
    default:
        fmt.Println("Invalid day")
    }
}

在这个例子中,switch语句根据day的值判断是工作日还是周末。如果day的值是"Monday"到"Friday"中的任意一个,则输出"It's a weekday";如果day的值是"Saturday"或"Sunday",则输出"It's a weekend"。

无表达式的switch语句

Go语言中的switch语句还可以省略表达式,直接在case语句中写条件判断。这种用法类似于if-else语句:

Go 复制代码
package main
import "fmt"

func main() {
    num := 10
    switch {
    case num > 0:
        fmt.Println("Number is positive")
    case num < 0:
        fmt.Println("Number is negative")
    default:
        fmt.Println("Number is zero")
    }
}

在这个例子中,switch语句没有指定表达式,而是直接在case语句中写条件判断。如果num大于0,则输出"Number is positive";如果num小于0,则输出"Number is negative";否则,执行default分支。

相关推荐
学习编程的gas4 小时前
C++面向对象编程入门:从类与对象说起(一)
开发语言·c++
冼紫菜4 小时前
【Spring Boot 多模块项目】@MapperScan失效、MapperScannerConfigurer 报错终极解决方案
java·开发语言·mybatis
Bear on Toilet5 小时前
Bug日记——实现“日期类”
开发语言·c++·bug
apcipot_rain5 小时前
《面向对象程序设计-C++》实验五 虚函数的使用及抽象类
开发语言·c++
明月看潮生7 小时前
青少年编程与数学 02-019 Rust 编程基础 05课题、复合数据类型
开发语言·青少年编程·rust·编程与数学
幼稚诠释青春7 小时前
Java学习笔记(对象)
java·开发语言
你怎么知道我是队长7 小时前
Go语言标识符
后端·golang
Wyc724098 小时前
JDBC:java与数据库连接,Maven,MyBatis
java·开发语言·数据库
强化学习与机器人控制仿真8 小时前
Newton GPU 机器人仿真器入门教程(零)— NVIDIA、DeepMind、Disney 联合推出
开发语言·人工智能·python·stm32·深度学习·机器人·自动驾驶