【Go】Go语言中的流程控制语句

news2025/1/12 10:57:30

在这里插入图片描述

✨✨ 欢迎大家来到景天科技苑✨✨

🎈🎈 养成好习惯,先赞后看哦~🎈🎈

🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。
🏆《博客》:Python全栈,Golang开发,PyQt5和Tkinter桌面开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,云原生K8S,linux,shell脚本等实操经验,网站搭建,数据库等分享。

所属的专栏:Go语言开发零基础到高阶实战
景天的主页:景天科技苑

在这里插入图片描述

文章目录

  • Go语言中的流程控制
    • 1. 顺序控制
    • 2. 条件控制
      • 2.1 if 语句
      • 2.2 if-else 语句
      • 2.3 if-else if-else 语句
      • 2.4 if条件语句实战
    • 3. 循环控制
      • 3.1 for 循环
      • 3.2 for-range 循环
      • 3.3 打印九九乘法表
    • 4. 分支控制
      • 4.1 switch 语句
      • 4.2 case穿透
    • 5. 跳转控制
      • goto语句
    • 6. 终止循环
      • 6.1 break 语句
      • 6.2 continue 语句

Go语言中的流程控制

在编程中,流程控制是决定程序如何执行的关键部分。Go语言作为一种静态类型、编译型语言,其流程控制机制与其他高级语言类似,但也有一些独特之处。本文将详细探讨Go语言中的流程控制语句,包括顺序控制、条件控制(if、if-else、if-else if-else)、循环控制(for循环、for-range循环)、分支控制(switch语句)、以及跳转控制(goto、break、continue)。本文通过实际案例,我们将深入理解这些控制语句的使用方法和应用场景。

1. 顺序控制

顺序控制是最基本的流程控制,程序按照从上到下的顺序逐行执行。在Go语言中,如果中间没有任何判断和跳转语句,程序就会按照这种默认的顺序执行。

示例代码

package main

import "fmt"

func main() {
    var num1 int = 10
    var num2 int = num1 + 20
    fmt.Println(num2) // 输出:30
}

在这个例子中,程序首先定义了变量num1并赋值为10,然后定义num2并赋值为num1 + 20,最后打印出num2的值。这个过程完全按照代码的顺序执行,没有任何跳转或条件判断。

2. 条件控制

条件控制语句用于根据条件表达式的真假来决定是否执行某段代码。Go语言提供了ifif-elseif-else if-else等结构来实现条件控制。

2.1 if 语句

if语句是最基本的条件控制语句,用于在条件表达式为真时执行一段代码。

语法格式

if 条件表达式 {
    // 条件为真时执行的代码
}

示例代码

package main

import "fmt"

func main() {
    a := 10
    if a < 20 {
        fmt.Println("a 小于 20")
    }
    fmt.Println("a 的值为:", a)
}
// 输出:a 小于 20
//       a 的值为: 10

在这里插入图片描述

2.2 if-else 语句

if-else语句用于在条件表达式为真时执行一段代码,否则执行另一段代码。

语法格式

if 条件表达式 {
    // 条件为真时执行的代码
} else {
    // 条件为假时执行的代码
}

示例代码

package main

import "fmt"

func main() {
    a := 100
    if a < 20 {
        fmt.Println("a 小于 20")
    } else {
        fmt.Println("a 不小于 20")
    }
    fmt.Println("a 的值为:", a)
}
// 输出:a 不小于 20
//       a 的值为: 100

在这里插入图片描述

2.3 if-else if-else 语句

if-else if-else语句用于处理多个条件分支,当某个条件满足时,执行相应的代码块。

语法格式

if 条件表达式1 {
    // 条件表达式1为真时执行的代码
} else if 条件表达式2 {
    // 条件表达式1为假且条件表达式2为真时执行的代码
} else {
    // 所有条件都不满足时执行的代码
}

示例代码

package main

import "fmt"

func main() {
    x := 5
    if x > 10 {
        fmt.Println("x 大于 10")
    } else if x < 5 {
        fmt.Println("x 小于 5")
    } else {
        fmt.Println("x 等于 5")
    }
}
// 输出:x 等于 5

在这里插入图片描述

2.4 if条件语句实战

用户交互

package main

import "fmt"

// 命令行程序 go build xxx.go 生成可执行程序。
func main() {

	// 练习:if的练习

	// 判断用户密码输入是否正确

	// 输入框 : 接收用户的输入 (新知识)
	// 第一次判断
	// 输入框 :请再次输入密码  接收用户的输入 (新知识)
	// 第二次判断
	// 如果两次都是对的,那么则登录成功

	//
	var num1 int
	var num2 int

	// 提示用户输入
	fmt.Printf("请输入密码 : \n")
	//fmt.Scan() 输入。传入的是指针对象,即是内存地址
	// 接收用户的输入 (阻塞式等待... 直到用户输入之后才继续运行)最简单的人机交互
	// Scan()  &num1地址,
	fmt.Scan(&num1) // 等待你的输入,卡住... 如果你输入完毕,回车。输入内容就会赋值给num
	// 123456 模拟数据,未来是在数据库中查询出来的。根据用户查的
	if num1 == 123456 {
		fmt.Println("请再次输入密码: ")
		fmt.Scan(&num2)
		if num2 == 123456 {
			fmt.Println("登录成功")
		} else {
			fmt.Println("登录失败")
		}
	} else {
		fmt.Println("登录失败")
	}

}

在这里插入图片描述

3. 循环控制

循环控制语句用于重复执行一段代码,直到满足特定的条件为止。Go语言提供了for循环来实现循环控制,并通过for-range结构来遍历集合。

3.1 for 循环

Go语言中的for循环是唯一的循环结构,但它足够灵活,可以模拟传统的whiledo-while循环。

语法格式

for 初始化语句; 条件表达式; 迭代语句 {
    // 循环体
}

示例代码

package main

import "fmt"

func main() {
    for i := 0; i < 5; i++ {
        fmt.Println(i)
    }
}
// 输出:0
//       1
//       2
//       3
//       4

在这里插入图片描述

计算1加到10的累加和

package main

import "fmt"

// 计算1加到10的累加和
func main() {
    sum := 0
    //goland的快捷输入fori,可以生成循环结构模板
    for i := 1; i <= 10; i++ {
        sum += i
    }
    fmt.Println(sum)

}

模拟 while 循环

package main

import "fmt"

func main() {
    x := 5
    for x > 0 {
        fmt.Println(x)
        x--
    }
}
// 输出:5
//       4
//       3
//       2
//       1

在这里插入图片描述

探究for循环
init:起始值 end:结束值 condition:条件变量
for 循环可以直接用
在for循环中定义的变量,作用域就只在 for循环内,外面是无法调用的
for + 结束for条件就可以跑起来

package main

import "fmt"

// 探究for循环   init:起始值  end:结束值  condition:条件变量
func main() {
    i := 0
    // for 循环可以直接
    // 在for循环中定义的变量,作用域就只在 for循环内,外面是无法调用的
    // for + 结束for条件就可以跑起来
    for i <= 5 {
        i++
    }
    fmt.Println(i)
}

在这里插入图片描述

无限循环

package main

import (
    "fmt"
    "time"
)

func main() {
    for {
        fmt.Println("This will run indefinitely!")
        //每隔一秒执行一次
        time.Sleep(1 * time.Second)
        // 通常这里会加入某种条件来跳出循环
        // 例如通过break语句
    }
}

在这里插入图片描述

3.2 for-range 循环

for-range循环是Go语言中处理集合(如数组、切片、字符串、映射)的便捷方式。它会自动迭代集合中的每个元素,并返回元素的索引和值(对于映射,则返回键和值)。

语法格式

for 索引,:= range 集合 {
    // 循环体
}

示例代码

package main

import "fmt"

func main() {
    nums := []int{1, 2, 3, 4, 5}
    for idx, num := range nums {
        fmt.Printf("Index: %d, Value: %d\n", idx, num)
    }
}
// 输出:Index: 0, Value: 1
//       Index: 1, Value: 2
//       Index: 2, Value: 3
//       Index: 3, Value: 4
//       Index: 4, Value: 5

在这里插入图片描述

3.3 打印九九乘法表

代码示例:

package main

import "fmt"

func main() {
	for i := 1; i < 10; i++ {
		for j := 1; j <= i; j++ {
			fmt.Printf("%d * %d = %d\t", j, i, i*j)
		}
		fmt.Println()

	}
}

在这里插入图片描述

4. 分支控制

分支控制语句用于根据不同的条件执行不同的代码块。Go语言提供了switch语句来实现分支控制,并允许在switch语句中进行类型匹配(type switch)。

4.1 switch 语句

switch语句基于不同的条件执行不同的代码块,与if-else系列语句相比,它在处理多个条件时更为清晰和简洁。

语法格式

switch 表达式 {
case1:
    // 表达式等于值1时执行的代码
case2,3:
    // 表达式等于值2或值3时执行的代码
default:
    // 表达式与所有case都不匹配时执行的代码
}

示例代码

package main

import "fmt"

func main() {
    grade := "B"
    switch grade {
    case "A":
        fmt.Println("优秀")
    case "B", "C":
        fmt.Println("良好")
    case "D":
        fmt.Println("及格")
    default:
        fmt.Println("不及格")
    }
}
// 输出:良好

在这里插入图片描述

如果所有条件都不满足,走default分支
在这里插入图片描述

4.2 case穿透

特殊的情况:需要多个条件结果的输出,case穿透 。fallthrough
在case中 一旦使用了 fallthrough,则会强制执行下一个case语句,不会去判断条件的。

示例代码

package main

import "fmt"

func main() {
    grade := "B"
    switch grade {
    case "A":
        fmt.Println("优秀")
    case "B", "C":
        fmt.Println("良好")
        //在case中 一旦使用了 fallthrough,则会强制执行下一个case语句,不会去判断条件的
        fallthrough
    case "D":
        fmt.Println("及格")
    default:
        fmt.Println("不及格")
    }
}

可以看到,grade满足case “B”, “C”,走了这个分支后,又走了下面一个分支case “D”
fallthrough实现了case穿透
在这里插入图片描述

5. 跳转控制

跳转控制语句用于改变程序的正常执行流程,Go 语言提供了 gotobreakcontinue 语句来实现跳转控制。

goto语句

语法格式:
goto 标签名

...  
标签名:  
// 代码块

示例代码(尽管不推荐,但展示其用法):

package main

import "fmt"

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

// 输出:从0到4的连续数字

在这里插入图片描述

6. 终止循环

break : 结束整个循环,立即停止

continue :结束当前这次循环,继续进行下一次循环

6.1 break 语句

break语句用于提前终止for、switch或select语句的执行。在多层嵌套循环中,break仅终止最近的一层循环。

语法格式:
break [标签名]

如果break后面跟有标签名,则会终止该标签指定的循环或switch语句。

示例代码:

package main

import "fmt"

func main() {

    for i := 1; i <= 10; i++ {
        if i == 5 {
            break

        }
        fmt.Println(i)
    }

}

i=5的时候退出循环
在这里插入图片描述

6.2 continue 语句

continue语句用于跳过当前循环的剩余部分,直接进入下一次迭代。同样,continue仅影响最近的一层循环。

语法格式:
continue [标签名]

如果continue后面跟有标签名,则会跳过该标签指定的循环的剩余部分,直接进行下一次迭代。
示例代码:

package main

import "fmt"

func main() {

    for i := 1; i <= 10; i++ {
        if i == 5 {
            continue // 到这里就结束了当次循环,不会向下了,继续从头开始
        }
        fmt.Println(i)
    }

}

跳过i=5的那次循环,继续进行后续的循环

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2131170.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python识别拖放的PDF文件再转成文本文件

日常工作中经常用到PDF文件&#xff0c;有些PDF文件的文字是不能复制的&#xff0c;为了复制这些文字&#xff0c;我们需要转化PDF文件&#xff0c;或者采用微信的OCR图片识别文字&#xff0c;这样非常不方便。为此&#xff0c;我编写了一个Python小程序&#xff0c;利用Tkinte…

基于51单片机的多功能台灯Protues仿真设计

目录 一、设计背景 二、设计要求 三、仿真演示 四、程序展示 一、设计背景 随着科技的飞速发展和智能家居的普及&#xff0c;传统的台灯已经难以满足现代消费者对照明设备的多样化需求。传统台灯的功能主要集中在提供基本的照明效果&#xff0c;其操作方式通常是通过手动调…

Langchain.js你必须要知道的核心组件

关于Langchain.js Langchain.js&#xff0c;在github上截止到今日已经有92k的start。之前一直偶有耳闻&#xff0c;但没有深入了解。今天看完后&#xff0c;真的是可以堪称大模型里的瑞士军刀。 LangChain由Harrison Chase于2022年10月作为开源软件项目推出&#xff0c;用于连…

抗菌肽;Parasin I;KGRGKQGGKVRAKAKTRSS;CAS号:219552-69-9

【Parasin I 简介】 Parasin I是一种抗菌肽&#xff0c;由19个氨基酸组成&#xff0c;最初从鲶鱼的皮肤粘液中分离得到。它具有广谱的抗菌活性&#xff0c;能够有效对抗革兰氏阳性菌和革兰氏阴性菌&#xff0c;包括一些对传统抗生素具有耐药性的菌株。 【中文名称】抗菌肽 Par…

C语言 11 字符串

前面学习了数组&#xff0c;而对于字符类型的数组&#xff0c;比较特殊&#xff0c;它实际上可以作为一个字符串&#xff08;String&#xff09;表示&#xff0c;字符串就是一个或多个字符的序列&#xff0c;比如在一开始认识的"Hello World"&#xff0c;像这样的多个…

如何编写智能合约——基于长安链的Go语言的合约开发

场景设计&#xff1a;文件存证系统 在数字化时代&#xff0c;文件存证和版本追踪变得越来越重要。设想一个场景&#xff1a;在一个法律事务管理系统中&#xff0c;用户需要提交和管理各种文件的版本记录&#xff0c;以确保每个文件在不同时间点的状态可以被准确追踪。文件可能经…

抖音生活服务是干什么的?很多人都不知道的入局途径曝光!

近年来&#xff0c;作为国内两大头部短视频平台之一的抖音一直在大力布局其生活服务业务&#xff0c;壮大自身实力的同时&#xff0c;也让不少人开始好奇抖音生活服务的概念&#xff0c;以抖音生活服务是干什么的和如何做抖音生活服务为代表多个相关话题因此成为了多个互联网社…

客户端负载均衡Ribbon实例

文章目录 一&#xff0c;概述二&#xff0c;实现过程三&#xff0c;项目源码1. 源码放送&#xff1a;2. 部署方式 四&#xff0c;功能演示五&#xff0c;其他 一&#xff0c;概述 一般来说&#xff0c;提到负载均衡&#xff0c;大家一般很容易想到浏览器 -> NGINX -> 反…

记一次 FastDFS 存储节点迁移:基于 scp 的实践与经验分享

一、背景 某某项目&#xff0c;机房到期&#xff0c;需要迁移至其他机房&#xff1b; 此项目已经运行了3年多&#xff0c;fastdfs累计数据大概在250G 左右&#xff0c;现需要把旧的fastdfs数据迁移到新的fastdfs上&#xff1b; 采用scp物理迁移数据的方式&#xff0c;停机迁移…

技术分享 | RK3568修改eMMC分区大小

我司IAC-RK3568-CM根据eMMC大小的不同&#xff0c;有着不同规格的产品&#xff0c;不论eMMC大小如何改变&#xff0c;其分区的配置大同小异&#xff0c;除了eMMC厂商所使用的区域无法变更外&#xff0c;留给用户的区域可自由写入。 我司产品默认eMMC启动&#xff0c;所以eMMC用…

【AI-18】Adam和SGD优化算法比较

Adam&#xff08;Adaptive Moment Estimation&#xff09;和 SGD&#xff08;Stochastic Gradient Descent&#xff0c;随机梯度下降&#xff09;是两种常见的优化算法&#xff0c;它们在不同方面有各自的特点。 一、算法原理 SGD&#xff1a; 通过计算损失函数关于每个样本的…

干货分享 | 激光测风雷达中准确监测温度、湿度和气压的重要性

前言 风场信息的测量是气象或空气动力学领域的重要工作内容之一&#xff0c;其测量的精确性对于气象研究尤为重要。 激光测风雷达作为新型测风技术&#xff0c;利用多普勒&#xff08;Doppler&#xff09;原理获取风向、风速信息&#xff0c;具有能够探测晴空风场、测风范围广…

element select + tree

element select tree的使用 <template slot"action1" slot-scope"text, record, index"><el-select v-model"record.tagValue" multiple placeholder"请选择":filter-method"(e) > filterTree(e, index)" filt…

5分钟配置Nginx?(二)

前言: 此文章分为两个部分。 5分钟搞懂什么是Nginx?(一)-CSDN博客文章浏览阅读82次。2.、那么此时入口的安全性则格外重要,同时因为加强了入口的安全性,后端的web server的安全则可以不用做额外安全工作。因为入口如果破防,后端web server一定破防,如果不…

支付宝开放平台-开发者社区——AI 日报「9 月 13 日」

1 OpenAl推出了一个新的大语言模型一 OpenAl o1 前沿技术瞭望官&#xff5c;阅读原文 新的模型主要体现在下面几个方面&#xff0c;思维链&#xff1a;o1在回答问题前会产生一个内部的思维链&#xff0c;这使得它能够进行更深入的推理。强化学习&#xff1a;通过大规模强化学…

Linux操作系统入门(一)

Linux操作系统是开源的类Unix操作系统内核&#xff0c;由林纳斯托瓦兹在1991年创建。 Linux操作系统以其强大的性能、稳定性和开放性&#xff0c;赢得了全球用户的广泛认可&#xff0c;从服务器到个人电脑&#xff0c;从超级计算机到嵌入式设备&#xff0c;都有它的身影。作为…

停止向供应商提供您的数据

组织管理其数据基础设施的方式正在发生重大转变。越来越多的公司认识到存储和计算分离的优势&#xff0c;从而获得更好的性能、成本节约和可扩展性。这一趋势是由 AI 和 ML 工作负载日益复杂所推动的&#xff0c;这些工作负载需要灵活、高性能的系统。Databricks 首席执行官 Al…

自定义Spring-start学习笔记

Spring Boot Start的创建和使用 start的工作原理(网图) 1. 设置Maven项目&#xff1a; 创建一个新的Maven或Gradle项目&#xff0c;并在项目的pom.xml文件中添加必要的Spring Boot依赖项和插件。下面以maven项目为例&#xff1a; 创建Spring Boot项目 &#xff0c;并在项目的…

私域流量的价值探索:开源链动 2+1 模式、AI 智能名片与 S2B2C 商城小程序的助力

摘要&#xff1a;本文从渠道视角深入剖析私域流量的特殊价值&#xff0c;探讨其作为一种新的销售渠道所具有的重要意义。同时引入开源链动 21 模式、AI 智能名片和 S2B2C 商城小程序等创新元素&#xff0c;阐述它们如何为私域流量的发展提供新的动力和机遇&#xff0c;进一步提…

UE5安卓项目打包安装

Android studio安装 参考&#xff1a;https://docs.unrealengine.com/5.2/zh-CN/how-to-set-up-android-sdk-and-ndk-for-your-unreal-engine-development-environment/ 打开android studio的官网&#xff1a;Download Android Studio & App Tools - Android Developers …