首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Go语言中的控制结构:条件语句和循环

Go语言中的控制结构:条件语句和循环

原创
作者头像
二一年冬末
发布于 2024-06-12 06:51:21
发布于 2024-06-12 06:51:21
2400
举报
文章被收录于专栏:活动活动

在编程中,控制结构是指引导程序如何执行的一系列指令。Go语言提供了多种控制结构来处理条件判断和循环操作。本文将详细介绍Go语言中的条件语句和循环结构,通过实例和代码解释,帮助读者全面理解和应用这些基本构造。


Ⅰ. 条件语句

1. if 语句

if语句是最基本的条件语句,根据布尔表达式的结果(true或false)来执行相应的代码块。

a. 基本语法
代码语言:go
AI代码解释
复制
if condition {
    // 当 condition 为 true 时执行的代码
}
b. 示例
代码语言:go
AI代码解释
复制
package main

import "fmt"

func main() {
    a := 10
    if a > 5 {
        fmt.Println("a is greater than 5")
    }
}

在这个示例中,如果变量a的值大于5,程序将输出a is greater than 5

2. if-else 语句

if-else语句在条件为false时执行另一个代码块。

a. 基本语法
代码语言:go
AI代码解释
复制
if condition {
    // 当 condition 为 true 时执行的代码
} else {
    // 当 condition 为 false 时执行的代码
}
b. 示例
代码语言:go
AI代码解释
复制
package main

import "fmt"

func main() {
    a := 3
    if a > 5 {
        fmt.Println("a is greater than 5")
    } else {
        fmt.Println("a is less than or equal to 5")
    }
}

在这个示例中,如果a大于5,程序将输出a is greater than 5,否则输出a is less than or equal to 5

3. if-else if-else 语句

if-else if-else语句用于处理多个条件分支。

a. 基本语法
代码语言:go
AI代码解释
复制
if condition1 {
    // 当 condition1 为 true 时执行的代码
} else if condition2 {
    // 当 condition2 为 true 时执行的代码
} else {
    // 当上述所有条件都为 false 时执行的代码
}
b. 示例
代码语言:go
AI代码解释
复制
package main

import "fmt"

func main() {
    a := 7
    if a > 10 {
        fmt.Println("a is greater than 10")
    } else if a > 5 {
        fmt.Println("a is greater than 5 but less than or equal to 10")
    } else {
        fmt.Println("a is 5 or less")
    }
}

在这个示例中,程序将检查多个条件并输出相应的结果。

4. 带初始化的 if 语句

Go语言的if语句允许在条件判断前执行一个简单的语句,通常用于变量的声明和赋值。

a. 基本语法
代码语言:go
AI代码解释
复制
if initialization; condition {
    // 当 condition 为 true 时执行的代码
}
b. 示例
代码语言:go
AI代码解释
复制
package main

import "fmt"

func main() {
    if a := 10; a > 5 {
        fmt.Println("a is greater than 5")
    }
}

在这个示例中,变量a在if语句内部声明并初始化。


Ⅱ. switch 语句

switch语句是一种多分支选择结构,适用于替代多个if-else if语句。

1. 基本语法

代码语言:go
AI代码解释
复制
switch expression {
case value1:
    // 当 expression == value1 时执行的代码
case value2:
    // 当 expression == value2 时执行的代码
default:
    // 当 expression 不等于上述所有值时执行的代码
}

2. 示例

代码语言:go
AI代码解释
复制
package main

import "fmt"

func main() {
    day := 3
    switch day {
    case 1:
        fmt.Println("Monday")
    case 2:
        fmt.Println("Tuesday")
    case 3:
        fmt.Println("Wednesday")
    default:
        fmt.Println("Other day")
    }
}

在这个示例中,根据变量day的值,程序输出相应的星期几。

3. 不带表达式的 switch 语句

Go语言的switch语句还可以省略表达式,直接在case语句中进行条件判断。

a. 基本语法
代码语言:go
AI代码解释
复制
switch {
case condition1:
    // 当 condition1 为 true 时执行的代码
case condition2:
    // 当 condition2 为 true 时执行的代码
default:
    // 当上述所有条件都为 false 时执行的代码
}
b. 示例
代码语言:go
AI代码解释
复制
package main

import "fmt"

func main() {
    a := 10
    switch {
    case a > 10:
        fmt.Println("a is greater than 10")
    case a > 5:
        fmt.Println("a is greater than 5 but less than or equal to 10")
    default:
        fmt.Println("a is 5 or less")
    }
}

在这个示例中,程序将根据条件判断来执行相应的代码块。

4. switch 语句中的 fallthrough

在Go语言中,使用fallthrough关键字可以使程序执行下一个case语句的代码。

a. 示例
代码语言:go
AI代码解释
复制
package main

import "fmt"

func main() {
    day := 2
    switch day {
    case 1:
        fmt.Println("Monday")
        fallthrough
    case 2:
        fmt.Println("Tuesday")
        fallthrough
    case 3:
        fmt.Println("Wednesday")
    default:
        fmt.Println("Other day")
    }
}

在这个示例中,程序将从匹配的case开始执行,并继续执行后续的case代码块,直到遇到下一个break或结束。


Ⅲ. 循环结构

1. for 语句

Go语言中唯一的循环结构是for语句,适用于各种循环场景。

2. 基本语法

a. 基本 for 循环
代码语言:go
AI代码解释
复制
for initialization; condition; post {
    // 循环体
}
b. 示例
代码语言:go
AI代码解释
复制
package main

import "fmt"

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

在这个示例中,程序将输出0到4的数字。

3. 省略初始化和后置语句

for循环的初始化语句和后置语句是可选的。

a. 示例
代码语言:go
AI代码解释
复制
package main

import "fmt"

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

在这个示例中,只有条件语句,没有初始化和后置语句。

4. 无限循环

省略所有三个部分会创建一个无限循环。

a. 示例
代码语言:go
AI代码解释
复制
package main

import "fmt"

func main() {
    i := 0
    for {
        if i >= 5 {
            break
        }
        fmt.Println(i)
        i++
    }
}

在这个示例中,循环通过条件判断和break语句来终止。

5. for-range 循环

for-range循环用于遍历数组、切片、映射和字符串。

a. 示例
代码语言:go
AI代码解释
复制
package main

import "fmt"

func main() {
    numbers := []int{1, 2, 3, 4, 5}
    for index, value := range numbers {
        fmt.Printf("Index: %d, Value: %d\n", index, value)
    }
}

在这个示例中,程序将遍历切片numbers并输出每个元素的索引和值。

6. 循环控制语句

Go语言提供了breakcontinuegoto语句来控制循环的执行流程。

a. break 语句

用于终止最内层的循环。

代码语言:go
AI代码解释
复制
package main

import "fmt"

func main() {
    for i := 0; i < 5; i++ {
        if i == 3 {
            break
        }
        fmt.Println(i)
    }
}

在这个示例中,当i等于3时,循环终止。

b. continue 语句

用于跳过当前循环的剩余代码,并开始下一次循环。

代码语言:go
AI代码解释
复制
package main

import "fmt"

func main() {
    for i := 0; i < 5; i++ {
        if i == 3 {
            continue
        }
        fmt.Println(i)
    }
}

在这个示例中,当i等于3时,跳过该次循环,继续下一次循环。

c. goto 语句

用于跳转到程序中的某个标签位置。

代码语言:go
AI代码解释
复制
package main

import "fmt"

func main() {
    i := 0
loop:
    fmt.Println(i)
    i++
    if i < 5 {
        goto loop
    }
}

在这个示例中,goto语句跳转到标签loop位置,实现了类似于循环的效果。


Ⅳ. 项目介绍与发展

为了展示Go语言中的控制结构在实际项目中的应用,我们将构建一个简单的控制结构项目,涵盖条件语句和循环的各种用法。

1. 项目结构

代码语言:go
AI代码解释
复制
control-structures/
├── main.go
├── conditions.go
└── loops.go

2. main.go

代码语言:go
AI代码解释
复制
package main

import "control-structures/utils"

func main() {
    utils.DemoConditions()
    utils.DemoLoops()
}

3. conditions.go

代码语言:go
AI代码解释
复制
package utils

import "fmt"

func DemoConditions() {
    // if 语句示例
    a := 10
    if a > 5 {
        fmt.Println("a is greater than 5")
    }

    // if-else 语句示例
    b := 3
    if b > 5 {
        fmt.Println("b is greater than 5")
    } else {
        fmt.Println("b is less than or equal to 5")
    }

    // if-else if-else 语句示例
    c := 7
    if c > 10 {
        fmt.Println("c is greater than 10")
    } else if c > 5 {
        fmt.Println("c is greater than 5 but less than or equal to 10")
    } else {
        fmt.Println("c is 5 or less")
    }

    // 带初始化的 if 语句示例
    if d := 10; d > 5 {
        fmt.Println("d is greater than 5")
    }

    // switch 语句示例
    day := 3
    switch day {
    case 1:
        fmt.Println("Monday")
    case 2:
        fmt.Println("Tuesday")
    case 3:
        fmt.Println("Wednesday")
    default:
        fmt.Println("Other day")
    }

    // 不带表达式的 switch 语句示例
    e := 10
    switch {
    case e > 10:
        fmt.Println("e is greater than 10")
    case e > 5:
        fmt.Println("e is greater than 5 but less than or equal to 10")
    default:
        fmt.Println("e is 5 or less")
    }

    // switch 语句中的 fallthrough 示例
    day = 2
    switch day {
    case 1:
        fmt.Println("Monday")
        fallthrough
    case 2:
        fmt.Println("Tuesday")
        fallthrough
    case 3:
        fmt.Println("Wednesday")
    default:
        fmt.Println("Other day")
    }
}

4. loops.go

代码语言:go
AI代码解释
复制
package utils

import "fmt"

func DemoLoops() {
    // 基本 for 循环示例
    for i := 0; i < 5; i++ {
        fmt.Println(i)
    }

    // 省略初始化和后置语句的 for 循环示例
    j := 0
    for j < 5 {
        fmt.Println(j)
        j++
    }

    // 无限循环示例
    k := 0
    for {
        if k >= 5 {
            break
        }
        fmt.Println(k)
        k++
    }

    // for-range 循环示例
    numbers := []int{1, 2, 3, 4, 5}
    for index, value := range numbers {
        fmt.Printf("Index: %d, Value: %d\n", index, value)
    }

    // break 语句示例
    for l := 0; l < 5; l++ {
        if l == 3 {
            break
        }
        fmt.Println(l)
    }

    // continue 语句示例
    for m := 0; m < 5; m++ {
        if m == 3 {
            continue
        }
        fmt.Println(m)
    }

    // goto 语句示例
    n := 0
loop:
    fmt.Println(n)
    n++
    if n < 5 {
        goto loop
    }
}

Go语言中的条件语句和循环结构,包括if语句、switch语句以及for循环的各种用法。

我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
git 更新历史提交
有时候我们在git commit后才发现,之前的一些提交有些问题,比如有些代码忘提交了或者有一些typo需要修改。如果要修改的地方是需要添加到最后一次提交上的,那么可以参考我的这篇博文修改,如果是在非最后一次提交上的,那么就需要用git rebase来操作。这里简单记录一下操作的过程。
王云峰
2023/10/23
3380
git 修改倒数二个提交
之前有介绍 commit --amend , 通过这个命令可以修改最新的commit提交。 还不了解的可以查看git 修改最后一次commit 文章
艳龙
2021/12/16
6230
日常开发过程中实际场景下使用git的一些简单总结
公司内部有代码仓库和 github 仓库邮箱不一致。例如已经全局配置了公司内的信息
ACK
2020/05/26
5150
git的面试题_es面试题
新增文件的命令:git add file或者git add . 提交文件的命令:git commit –m或者git commit –a 查看工作区状况:git status –s 拉取合并远程分支的操作:git fetch/git merge或者git pull 查看提交记录命令:git reflog
全栈程序员站长
2022/08/03
8840
这才是真正的Git——Git实用技巧
作者:lzaneli,腾讯 TEG 前端开发工程师 本篇是这个系列的最后一篇文章,之前的文章主要讲的是基础原理部分(见上方专辑),在理解原理的基础上,介绍一些实用的技巧给大家,希望能提高大家的开发效率。 这篇文章因为更多的是列举实际应用的技巧,所以文章结构会显得散乱一些,也不会像前两篇文章那样要求大家顺序阅读。每个点都是互相独立的,大家可以根据自己的需要学习。 在这篇文章里我会使用操作录屏的方式来介绍例子,希望这种方式可以让你更直观的了解命令的使用方法。 将几个commit压缩成一个 ⚠️ 这里有
腾讯技术工程官方号
2020/08/24
7920
【Git】修改已经提交的commit内容
通过 Git 进行版本管理时,对于已经提交但没有 push 的 message 信息,发现提交信息填写错误后,如何进行修改? 对于已经 push 的 message 信息如何修改?通过git rebase -i进行分支管理,以及重新操作已经提交的分支信息[reword,edit,squash 等]。此次用到的主要是reword修改已经提交的message信息。
程序小工
2018/09/12
9.7K1
关于 Git 重写提交历史的一些笔记
傍晚时分,你坐在屋檐下,看着天慢慢地黑下去,心里寂寞而凄凉,感到自己的生命被剥夺了。当时我是个年轻人,但我害怕这样生活下去,衰老下去。在我看来,这是比死亡更可怕的事。--------王小波
山河已无恙
2023/01/30
4760
【linux命令讲解大全】013.Git:分布式版本控制系统的先驱和常用命令清单(二)
我还遇到了如下面错误,lab默认给master分支加了保护,不允许强制覆盖。Project(项目)->Setting->Repository 菜单下面的Protected branches把master的保护去掉就可以了。修改完之后,建议把master的保护再加回来,毕竟强推不是件好事。
全栈若城
2024/03/02
1590
姐姐问我什么是变基操作(git-rebase)
话说,我和姐姐的缘分是在那一个月黑风高的晚上,啪,姐姐一巴掌打在了我的脸上并说了一句:能不能讲重点~~~。哈哈,不开玩笑了,直接说重点吧。我们先来看一个场景,我查看了一下我github上的个人仓库,commit提交次数很多,提交内容如下:
Golang梦工厂
2022/07/08
6920
姐姐问我什么是变基操作(git-rebase)
如何维持整洁的 Git 提交记录?送你三个锦囊!
背景 大家都有学习如何规范简洁的编写代码,但却很少学习如何规范简洁的提交代码。现在大家基本上都用 Git 作为源码管理的工具,Git 提供了极大的灵活性,我们按照各种 workflow 来提交/合并 code,这种灵活性把控不好,也会带来很多问题 最常见的问题就是乱成一团的 git log history,那真的是老太太的裹脚布, 又臭又长, 个人极其不喜欢这种 log 造成这个问题的根本原因就是随意提交代码。 代码都提交了,那还有什么办法拯救吗?三个锦囊,就可以完美解决了 如果您正在学习Spring C
程序猿DD
2023/04/04
4210
如何维持整洁的 Git 提交记录?送你三个锦囊!
十分钟了解 git 那些 “不常用” 命令
链接:https://segmentfault.com/a/1190000022107836
好好学java
2020/03/31
5460
Git——常用命令总结
思索
2024/08/14
1460
Git 合并多个 commit,保持历史简洁
开发过程中,本地通常会有无数次 commit ,可以合并“相同功能”的多个 commit,以保持历史的简洁。
叨叨软件测试
2020/09/01
153.5K0
Git提交合并提交及注释
本地开发时,可以随时去提交写好的代码,但这样会导致提交历史比较多,推送到远端或者发起Pull Request显得比较杂乱,这时就可以使用rebase命令将几次提交或者全部提交合并成一次提交。
程序新视界
2021/12/07
7940
Git知识总览(五) Git中的merge、rebase、cherry-pick以及交互式rebase
上篇博客聊了《git分支管理之rebase 以及 cherry-pick相关操作》本篇博客我们就以Learning Git中的关卡进行展开。下方列举了LearningGit中的 merge、rebase、reset、revert、cherry-pick 以及交互式rebase相关关卡的操作以及对应的解析。后边在聊交互式rebase操作是,不单单给出了LearningGit中的内容,而且给出了真正的Git分支在交互式rebase操作时的具体案例。 learngitbranching的地址为:https://l
lizelu
2018/03/28
22.1K0
Git知识总览(五) Git中的merge、rebase、cherry-pick以及交互式rebase
玩不转的 GitHub (一)
写这篇并不是详细的去写一下关于版本控制和 Git 使用的详细教程,而是整理一下 Git 入门、GitHub 常规使用、Gitee 常规使用以及在工作中常见的一些操作。
双鬼带单
2021/07/20
5300
Git 不同情况下的回滚操作
在未进行git push前的所有操作,都是在“本地仓库”中执行的。我们暂且将“本地仓库”的代码还原操作叫做“撤销”
JS菌
2019/04/10
6280
Git入门到高级系列2-git高级操作
项目分支就是版本库的一个副本,有了分支后可以把你的工作从开发主线上分离开来, 以免影响开发主线。
老马
2019/05/25
1.4K0
git 实践总结
本地分支和远程分支各自有提交,这时,如果直接pull,会要求将远程分支merge到本地,这样虽然可以,但是确实产生一个无用的merge 提交记录。
JarvisChu
2019/12/05
1.7K0
Git 使用记录 - 各种撤销
以上操作用于撤销保存在工作区修改,但是不会撤销暂存区中的修改。 由于修改还没记录到 git 中,撤销无法恢复,请慎重!
orientlu
2018/09/13
1.3K0
推荐阅读
相关推荐
git 更新历史提交
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档