9.5 Go语言入门(条件语句和循环语句)

Go语言入门(条件语句和循环语句)

  • 目录
    • 四、条件语句和循环语句
      • 1. 条件语句
        • 1.1 if 语句
        • 1.2 if-else 语句
        • 1.3 if-else if-else 语句
        • 1.4 带初始化语句的 if
        • 1.5 switch 语句
        • 1.6 带条件的 switch
        • 1.7 多个条件的 case
      • 2. 循环语句
        • 2.1 基本 for 循环
        • 2.2 省略初始化语句和后置语句的 for 循环
        • 2.3 无限循环
        • 2.4 使用 range 的 for 循环
      • 3. 控制语句
        • 3.1 break 语句
        • 3.2 continue 语句
        • 3.3 goto 语句

目录

Go 语言(Golang)是一种静态类型、编译型语言,由 Google 开发,专注于简洁性、并发和高效性。

下面是 Go 语言的基础语法讲解和代码示例。


上一篇:三、Go语言入门(运算符)


四、条件语句和循环语句

Go 语言中,条件语句和循环语句是控制程序流的基本结构。通过这些语句,可以实现不同的逻辑分支和重复操作。下面详细讲解 Go 语言中的条件语句和循环语句,并提供代码示例。

1. 条件语句

1.1 if 语句

if 语句用于条件判断。基本语法如下:

if condition {// 当 condition 为 true 时执行
}

package mainimport "fmt"func main() {age := 20if age >= 18 {fmt.Println("You are an adult.")}
}
1.2 if-else 语句

if-else 语句用于在条件为 false 时执行另一个分支。

package mainimport "fmt"func main() {age := 16if age >= 18 {fmt.Println("You are an adult.")} else {fmt.Println("You are a minor.")}
}
1.3 if-else if-else 语句

if-else if-else 语句用于多个条件判断。

package mainimport "fmt"func main() {score := 85if score >= 90 {fmt.Println("Grade: A")} else if score >= 80 {fmt.Println("Grade: B")} else if score >= 70 {fmt.Println("Grade: C")} else if score >= 60 {fmt.Println("Grade: D")} else {fmt.Println("Grade: F")}
}
1.4 带初始化语句的 if

if 语句支持在条件判断之前执行一个简单的语句。这个语句的作用域仅限于 if 语句块。

package mainimport "fmt"func main() {if x := 10; x > 5 {fmt.Println("x is greater than 5")}// fmt.Println(x) // 这里不能访问 x,因其作用域仅限于 if 语句块
}
1.5 switch 语句

switch 语句用于简化多个条件判断。每个 case 分支会自动终止,除非使用 fallthrough 关键字。

package mainimport "fmt"func main() {day := 3switch day {case 1:fmt.Println("Monday")case 2:fmt.Println("Tuesday")case 3:fmt.Println("Wednesday")case 4:fmt.Println("Thursday")case 5:fmt.Println("Friday")default:fmt.Println("Weekend")}
}
1.6 带条件的 switch

switch 语句可以不带表达式,这时每个 case 都是一个独立的条件判断。

package mainimport "fmt"func main() {num := -10switch {case num < 0:fmt.Println("Number is negative")case num == 0:fmt.Println("Number is zero")case num > 0:fmt.Println("Number is positive")}
}
1.7 多个条件的 case

一个 case 分支可以包含多个条件,用逗号分隔。

package mainimport "fmt"func main() {char := 'a'switch char {case 'a', 'e', 'i', 'o', 'u':fmt.Println("Vowel")default:fmt.Println("Consonant")}
}

2. 循环语句

for 是 Go 唯一的循环语句,可以实现各种循环结构。

2.1 基本 for 循环

for 循环包括初始化语句、条件表达式和后置语句。

package mainimport "fmt"func main() {for i := 0; i < 5; i++ {fmt.Println(i)}
}
2.2 省略初始化语句和后置语句的 for 循环

可以省略 for 循环的初始化语句和后置语句。

package mainimport "fmt"func main() {i := 0for i < 5 {fmt.Println(i)i++}
}
2.3 无限循环

省略条件表达式,可以创建一个无限循环。

package mainimport "fmt"func main() {i := 0for {fmt.Println(i)i++if i >= 5 {break}}
}
2.4 使用 range 的 for 循环

range 关键字可以用来迭代数组、切片、字符串、映射和通道。

package mainimport "fmt"func main() {// 迭代数组arr := [5]int{1, 2, 3, 4, 5}for index, value := range arr {fmt.Println("Index:", index, "Value:", value)}// 迭代字符串str := "hello"for index, char := range str {fmt.Println("Index:", index, "Char:", char)}// 迭代映射m := map[string]int{"a": 1, "b": 2}for key, value := range m {fmt.Println("Key:", key, "Value:", value)}
}

3. 控制语句

break 和 continue 用于控制循环的执行。

3.1 break 语句

break 用于终止循环。

package mainimport "fmt"func main() {for i := 0; i < 10; i++ {if i == 5 {break}fmt.Println(i)}
}
3.2 continue 语句

continue 用于跳过当前迭代,继续下一次迭代。

package mainimport "fmt"func main() {for i := 0; i < 10; i++ {if i%2 == 0 {continue}fmt.Println(i)}
}
3.3 goto 语句

Go 语言还支持 goto 语句用于无条件跳转,尽量避免使用 goto,以保持代码的可读性和可维护性。

package mainimport "fmt"func main() {i := 0
Loop:fmt.Println(i)i++if i < 5 {goto Loop}
}

通过理解条件语句和循环语句,可以编写逻辑复杂且结构清晰的 Go 语言程序。这些控制结构是编程中不可或缺的部分,掌握它们将极大提升你的编程能力。


下一篇:五、Go语言入门(数组、切片和指针)


在这里插入图片描述

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

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

相关文章

【C++风云录】领略嵌入式世界:嵌入式系统与实时操作系统

打开嵌入式的门&#xff1a;从理论基础到实践应用 前言 在这篇文章中&#xff0c;我们将深入探讨六种不同的嵌入式操作系统&#xff0c;分别是ChibiOS, RIOT OS, eCos, NuttX, Contiki和FreeRTOS。每个操作系统都将包括四部分内容&#xff1a;定义、特性、如何在嵌入式系统中…

Maven或Gradle构建java项目的优势

使用Maven或Gradle这样的构建工具构建项目与直接在Eclipse中构建Java项目存在多个方面的区别。以下是一些关键的差异和优势: 1. 项目结构和依赖管理 Eclipse普通Java项目 项目结构:通常比较简单,只有 src 目录用于存放源代码。依赖管理:依赖库需要手动下载并添加到项目的…

Flowable第一次启动MYSQL8.0版本(踩坑)

flowable工作流项目第一次启动报错表不存在&#xff0c;是因为连接mysql数据库的时候没有设置&nullCatalogMeansCurrenttrue&#xff0c;mysql5.0以上该配置默认为flase&#xff0c;即不操作本数据库。因此需要修改为true。datasource:url: jdbc:mysql://127.0.0.1:3306/fl…

从零开始搭建SpringCloud Alibaba微服务架构

Spring Cloud Alibaba是Spring Cloud的一个拓展项目&#xff0c;它用于构建基于阿里巴巴的微服务应用。它提供了多个阿里巴巴的开源组件&#xff0c;如Nacos、Sentinel、Dubbo等&#xff0c;用于解决微服务架构中的服务注册、配置管理、流量控制等问题。 Spring Cloud Alibaba…

记.netcore部署到银河麒麟linux服务器过程详解

一.服务器配置 操作系统:银河麒麟桌面操作系统V10 CPU:intel i5 内存:16G 内核:5.10.0.8-generic 未激活 二.运行环境安装 .netcore 6.0 runtime时安装下载离线包 Download .NET 6.0 (Linux, macOS, and Windows) -下载完后进行解压 sudo su #提权 mkdir -p $HOME/…

Flutter底部导航栏和顶部Tab切换完整代码

题记 —— 执剑天涯&#xff0c;从你的点滴积累开始&#xff0c;所及之处&#xff0c;必精益求精&#xff0c;即是折腾每一天。 目前市场上绝大部分App的布局结构基本统一&#xff1a;底部导航顶部导航&#xff0c;底部导航页里嵌套顶部导航栏&#xff0c;顶部导航页里嵌套图文…

功能测试:核心原理、挑战以及解决之道

在软件开发生命周期中&#xff0c;功能测试占据了至关重要的位置。它是确保软件应用按照既定的要求和规格运行的关键测试阶段。功能测试的目的在于验证软件的功能、行为和用户界面等是否达到了业务需求的标准。本文将深入探讨功能测试的概念&#xff0c;执行过程中可能遇到的挑…

TikTok“66大促” 你准备好了吗?

TikTok Shop&#xff0c;也称TikTok电商&#xff0c;作为全球最具创新力和影响力的短视频平台之一&#xff0c;一直以来以其独特的娱乐性内容吸引着数以亿计的用户。而在TikTok Shop上购物&#xff0c;现在已经成为众多年轻用户的时尚选择。随着TikTok Shop开放中国商家入驻&am…

Win10【无线显示器】安装失败(无法添加)解决中。。。

目录 ■失败现象 ■解决方法 【服务启动1】 【服务确认】 【服务启动2】 参考 ■查看电脑是否支持【Miracast无线投屏功能】 参考2 ■解决方法&#xff08;对我的这台电脑有效&#xff09; ■解决后的效果 ■连接时&#xff0c;出现【无法在此设备上查看受保护内容。…

通胀担忧仍存,美联储降息预期或又推迟

KlipC报道&#xff1a;周三&#xff0c;美联储公布4月30日至5月1日政策会议纪要&#xff0c;会议纪要显示美联储对通胀仍感到担忧&#xff0c;将更长时间维持利率不变&#xff0c;必要时进一步收紧政策。 尽管在前不久公布的4月CPI数据显示通胀有所缓解&#xff0c;但是被认为…

【Linux】Centos7安装JDK

【Linux】Centos7安装JDK 下载 Oracle 官网下载 JDK17 https://www.oracle.com/cn/java/technologies/downloads/#java17 安装 使用rz命令上传 jdk tar 包&#xff0c;上传失败直接用 xftp 上传 在安装图形界面时&#xff0c;有勾选开发工具&#xff0c;会自动安装 JDK 需要先…

微信小程序反编译/解包

微信小程序反编译/解包 环境与工具 操作系统&#xff1a;Windows 11 23H2 微信版本&#xff1a;3.9.10.19 Q&#xff1a;如何找到小程序文件位置&#xff1f; A&#xff1a;在微信的设置找到文件路径&#xff0c;小程序文件位于 \WeChat Files\Applet\。 Q&#xff1a;小程…

FATAL ERROR Ineffective mark-compacts near heap limit Allocation failed

# 在运行 npm run build 构建命令时遇到内存不足的问题 # 提示这个错误 FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory原因 在运行 Vue CLI 构建命令时遇到内存不足的问题可能是因为构建过程中需要处理的文件和模…

4K高刷显示器 - 10大产品对比

4K高刷显示器 - 蚂蚁电竞 N27U 显示屏评测报告 一、产品品牌知名度 蚂蚁电竞&#xff0c;作为一家专注于电竞领域的品牌&#xff0c;近年来在市场上逐渐崭露头角。虽然相较于一些老牌显示器品牌&#xff0c;蚂蚁电竞的知名度还有待提高&#xff0c;但其在电竞领域的表现却不容…

MySQL 状态【中文对照表】

SHOW STATUS 是一个非常有用的 MySQL 命令&#xff0c;它可以帮助我们了解 MySQL 服务器的当前状态&#xff0c;从而更好地管理和优化我们的数据库。 MySQL SHOW STATUS 命令手册 SHOW STATUS 命令概述 在 MySQL 中&#xff0c;SHOW STATUS 命令是一个强大的工具&#xff0c;…

codeblocks快速注释多行

ctrlshiftc可以快速注释掉多行。 ctrlshiftx可以取消注释&#xff0c;才发现&#xff0c;哈哈真方便。

elasticsearch如何使用reindex迁移索引,完成分片的拆分

1、删除我的测试索引&#xff1a;old_index curl -X DELETE "http://hostname -i:9200/old_index" curl -X DELETE "http://hostname -i:9200/new_index"2、检查集群索引情况 $ curl -X GET "http://hostname -i:9200/_cat/indices?v" health…

Java面试题:线程池中常见的阻塞队列

线程池中常见的阻塞队列 workQueue:当没有空闲核心线程时,新来任务会加入此队列进行排队,队列满会创建救急线程执行任务 ArrayBlockingQueue: 基于数组结构的有界(容量固定)阻塞队列,FIFO 先进先出 提前初始化Node数组 提前创建Node 一把锁,同时只能进行入队和出队 Lin…

秋招突击——算法打卡——5/24——无重复字符的最长字串

题目描述 实现代码 // 无重复字符的最长子串 int lengthOfLongestSubstring(string s) {int l 0,r 0;int res 0;unordered_map<char,int> temp;while(l < s.size()){temp[s.at(l)] l;for (r l 1; r < s.size() ; r) {if(temp.count(s.at(r))) break;else te…

Golang:使用go-resty/resty发送http请求get和post

简单的 HTTP 和 REST 客户端&#xff0c;受到 Ruby rest-client 的启发 文档 https://github.com/go-resty/resty/ 安装 go get github.com/go-resty/resty/v2示例 1、发起GET请求 package mainimport ("fmt""strconv""time""github.…