当前位置: 首页 > article >正文

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

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


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

控制结构

控制结构是编程语言中用于控制程序执行流程的语句。Go语言提供了常见的控制结构,如条件语句、循环语句和switch语句。条件语句
Go语言中的条件语句主要包括if、else if和else。下面是一个简单的例子:

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循环的基本语法如下:


package main
import "fmt"

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


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

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

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

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

无限循环

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


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循环的功能:


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语言中用于遍历数组、切片、字符串、映射和通道的一种简洁方式。它的语法如下:


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返回键和值。

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


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)
    }
}


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


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语句示例:


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语句还支持多个条件匹配。例如:

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语句:


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分支。


http://www.kler.cn/a/522845.html

相关文章:

  • 【NLP251】NLP RNN 系列网络
  • 使用 Redis 实现分布式锁的基本思路
  • postgres基准测试工具pgbench如何使用自定义的表结构和自定义sql
  • 2025-01-28 - 通用人工智能技术 - RAG - 本地安装 DeepSeek-R1对话系统 - 流雨声
  • 深入探索C++17的std::any:类型擦除与泛型编程的利器
  • HTML5+SVG+CSS3实现雪中点亮的圣诞树动画效果源码
  • STM32 按键密码系统的实现
  • 橙河网络:市场调研都会用到哪些工具?
  • 四.2 Redis 五大数据类型/结构的详细说明/详细使用( set 集合数据类型详解和使用)
  • go理论知识——Go Channel 笔记 [特殊字符]
  • BFS算法的实现(例题)
  • 开源物业管理系统赋能社区管理提升居民服务体验与满意度
  • Android源码阅读笔记(二)—— 启动模式
  • 理解 IS-IS 中重要概念之间的关系
  • 亚马逊多店铺运营攻略!如何实现多开店铺防关联?
  • 图漾相机-ROS2-SDK-Ubuntu版本编译(新版本)
  • 基于微信小程序高校课堂教学管理系统 课堂管理系统微信小程序(源码+文档)
  • UG二开UF-常用方法
  • MacOS 如何解决无法打开 ‘xxx’,因为 Apple 无法检查其是否包含恶意软件
  • PhotoShop中JSX编辑器安装
  • 机器学习day4
  • Linux 学习笔记__Day2
  • 深入理解三高架构:高可用性、高性能、高扩展性的最佳实践
  • 刷题记录 贪心算法-3:376. 摆动序列
  • 【数据结构】(1)集合类的认识
  • 关于使用PHP时WordPress排错——“这意味着您在wp-config.php文件中指定的用户名和密码信息不正确”的解决办法