Go语言之路————条件控制:if、for、switch

Go语言之路————if、for、switch

  • 前言
  • if
  • for
  • switch
  • goto和label

前言

  • 我是一名多年Java开发人员,因为工作需要现在要学习go语言,Go语言之路是一个系列,记录着我从0开始接触Go,到后面能正常完成工作上的业务开发的过程,如果你也是个小白或者转Go语言的,希望我这篇文章对你有所帮助。
  • 有关go其他基础的内容的文章大家可以查看我的主页,接下来主要就是把这个系列更完,更完之后我会在每篇文章中挂上连接,方便大家跳转和复习。

if

go中的if语句,和Java中的大差不差,唯一的差别就是,条件判断语句不需要加括号,看看下面这个例子:

func main() {ifTest(-2)ifTest(1)ifTest(20)
}func ifTest(num int) {if num < 0 {fmt.Println("这是一个负数")} else if num < 10 {fmt.Println("小于10的整数")} else {fmt.Println("大于10的整数")}
}//输出结果:
这是一个负数
小于10的整数
大于10的整数

for

在go中,可以说if和for是使用最多的,而 for循环又是花样最多的,可以有很多语法糖,java中就有很多,fori 、增强for、foreach,go也是一样的,只是写法有略微不同

  1. 我们先看看最常见的fori:

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

    我们咋一眼看过去,是不是和java的一模一样,只是有细微的差别,比如i的定义、for后面的逻辑没有括号包裹,大家有没有发现,go中就是不喜欢用括号把我们的语句包裹起来,是为了简洁吗?

  2. 我们还可以一次性初始化多个变量,多个判断语句
    下面这个例子就是同时定义i和j两个变量,然后去做循环和条件判断处理

    	for i, j := 0, 0; i < 10 && j < 20; i, j = i+1, j+2 {fmt.Println(i, j)}
    
  3. go中没有while关键词,用for就可以来表示while
    当我们只保留循环条件,那么for就变成了while

    func main() {a := 1for a < 10 {a++}
    }
    

    如果我们要实现while(true),那么我们就不加循环条件,下面这个案例就是一个死循环,程序会一直执行a++

    func main() {a := 1for {a++}
    }
    
  4. for range
    for range可以更加方便的遍历一些可迭代的数据结构,如数组,切片,字符串,映射表,通道。语句格式如下:

    for index, value := range iterable {}
    

    在这个格式中,index代表我们的下标,而value代表的是值,类似与这种表达式返回两个值的,后面我们会经常遇到,如果我们只想关注其中一个,那么可以用_下划线代替,比如上面的案例可以这样写:对于不想处理的index或者value,用_代替后,编辑器就不会报错了。

    	for _, value := range iterable {}for index, _ := range iterable {}
    
  5. 用range遍历一个字符串

    str := "hello world"
    for index, value := range str {fmt.Println(index, value)
    }
    输出:
    0 104
    1 101
    2 108
    3 108
    4 111
    

    为何输出的是数字,因为go中默认输出的是Unicode码,要想输出字母可以用fmt.printf结合%c来转换。
    6. break
    和java中的break一样,终止循环的关键字,这里就不展开说明了
    7. continue
    和java中的continue一样,这里就不展开说明了
    当然,正如前面说的,range用的最多的就是遍历数组、切片、map等,后面我们讲到的时候会再次提及。

switch

go中的switch也是和Java的大差不差,也是switch关键字后面参数没有括号,我们直接看案例:

func main() {switchTest(1)switchTest(2)switchTest(22)
}func switchTest(num int) {switch num {case 1:fmt.Println(1)case 2:fmt.Println(2)default:fmt.Println("任何数")}
}//输出:
1
2     
任何数

当然,switch还有很多变种写法,比如我们要判断的值不是参数传进来的,而是某个方法返回来的:

func main() {switchTest()
}func switchTest() {switch num := getNum(); {case num == 1:fmt.Println(1)case num == 2:fmt.Println(2)default:fmt.Println("任何数")}
}func getNum() int {return 1
}//输出1

fallthroug:这个关键词代表着执行当前分支之后,程序不break,不管判断条件强制执行下一个分支,我们如果在上面的案例中加入这个关键字,就会输出1,2

```go
func main() {switchTest()
}func switchTest() {switch num := getNum(); {case num == 1:fmt.Println(1)fallthroughcase num == 2:fmt.Println(2)default:fmt.Println("任何数")}
}func getNum() int {return 1
}//输出1,2

goto和label

goto和label是使用比较多的,当然break,continue也是能搭配label进行逻辑跳转,下边我们定义一个标签A:

A:fmt.Println("跳转到A标签")

然后我们结合goto,用一个简单的案例看看是怎么使用的:

func main() {test()
}func test() {for i := 0; i < 10; i++ {if i == 3 {goto A}fmt.Println(i)}
A:fmt.Println("跳转到A标签")
}输出:
0
1
2
跳转到A标签

通过输出我们看到,在for循环中,我们如果进行了goto的跳转,会终止当前的for循环。

到这里,go中的条件控制常用的就讲完了,下一篇我们将进入重头戏,说一下go中使用最多的两个数据结构:切片和map

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

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

相关文章

彻底讲清楚 单体架构、集群架构、分布式架构及扩展架构

目录 什么是系统架构 单体架构 介绍 示例图 优点 缺点 集群架构 介绍 示意图 优点 缺点 分布式架构 示意图 优点 缺点 生态扩展 介绍 示意图 优点 缺点 扩展&#xff1a;分布式服务解析 纵切拆服务 全链路追踪能力 循环依赖 全链路日志&#xff08;En…

Typora + PowerShell 在终端打开文件

最近在用 Hexo 搭我人生中的第一个博客&#xff0c;Hexo 新建帖子的时候需要在终端用命令hexo n&#xff0c;然后再用 Typora 打开&#xff0c;用鼠标感觉很麻烦&#xff0c;因此直接用终端一键启动了。 发现 Typora 的一个 bug&#x1f41b;&#xff0c;在 YAML 后面写第一个字…

【RAG落地利器】向量数据库Qdrant使用教程

TrustRAG项目地址&#x1f31f;&#xff1a;https://github.com/gomate-community/TrustRAG 可配置的模块化RAG框架 环境依赖 本教程基于docker安装Qdrant数据库&#xff0c;在此之前请先安装docker. Docker - The easiest way to use Qdrant is to run a pre-built Docker i…

设计模式-单例模式

定义 保证一个类仅有一个实例&#xff0c;并提供一个访问它的全局访问点。 类图 类型 饿汉式 线程安全&#xff0c;调用效率高&#xff0c;但是不能延迟加载。 public class HungrySingleton {private static final HungrySingleton instancenew HungrySingleton();private …

初学stm32 --- CAN

目录 CAN介绍 CAN总线拓扑图 CAN总线特点 CAN应用场景 CAN物理层 CAN收发器芯片介绍 CAN协议层 数据帧介绍 CAN位时序介绍 数据同步过程 硬件同步 再同步 CAN总线仲裁 STM32 CAN控制器介绍 CAN控制器模式 CAN控制器模式 CAN控制器框图 发送处理 接收处理 接收过…

OpenHarmony 4.1 SDK11 北向应用开发笔记

目录 声明 1、开启其他应用 2、延时切换页面 3、设置页面切换效果 4、设置背景图片和背景铺满屏幕 5、设置隐藏状态和导航条 6、设置组件大小和对齐方式 7、设置按钮类型改变按钮边框圆角半径 8、常用布局方式 9、布局技巧 声明 本笔记基于OpenHarmony 4.1 SDK11&am…

leetcode707-设计链表

leetcode 707 思路 本题也是用了虚拟头节点来进行解答&#xff0c;这样的好处是&#xff0c;不管是头节点还是中间的节点都可以当成是中间节点来处理&#xff0c;用同一套方法就可以进行处理&#xff0c;而不用考虑太多的边界条件。 下面题目中最主要的实现就是添加操作addA…

高效实现 Markdown 转 PDF 的跨平台指南20250117

高效实现 Markdown 转 PDF 的跨平台指南 引言 Markdown 文件以其轻量化和灵活性受到开发者和技术写作者的青睐&#xff0c;但如何将其转换为易于分享和打印的 PDF 格式&#xff0c;是一个常见需求。本文整合了 macOS、Windows 和 Linux 三大平台的转换方法&#xff0c;并探讨…

汽车网络信息安全-ISO/SAE 21434解析(上)

目录 概述 第四章-概述 1. 研究对象和范围 2. 风险管理 第五章-组织级网络安全管理 1. 网络安全治理&#xff08;cybersecurity governance&#xff09; 2. 网络安全文化&#xff08;cybersecurity culture) 3. 信息共享&#xff08;Information Sharing) 4. 管理体系…

计算机网络 (50)两类密码体制

前言 计算机网络中的两类密码体制主要包括对称密钥密码体制&#xff08;也称为私钥密码体制、对称密码体制&#xff09;和公钥密码体制&#xff08;也称为非对称密码体制、公开密钥加密技术&#xff09;。 一、对称密钥密码体制 定义&#xff1a; 对称密钥密码体制是一种传…

PCL K4PCS算法实现点云粗配准【2025最新版】

目录 一、算法原理1、算法概述2、算法流程3、参考文献二、 代码实现1、原始版本2、2024新版三、 结果展示本文由CSDN点云侠原创,原文链接,首发于:2020年4月27日。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的抄袭狗。 博客长期更新,本文最近一次更新时间为…

消息队列实战指南:三大MQ 与 Kafka 适用场景全解析

前言&#xff1a;在当今数字化时代&#xff0c;分布式系统和大数据处理变得愈发普遍&#xff0c;消息队列作为其中的关键组件&#xff0c;承担着系统解耦、异步通信、流量削峰等重要职责。ActiveMQ、RabbitMQ、RocketMQ 和 Kafka 作为市场上极具代表性的消息队列产品&#xff0…

python编程-OpenCV(图像读写-图像处理-图像滤波-角点检测-边缘检测)边缘检测

OpenCV中边缘检测四种常用算子&#xff1a; &#xff08;1&#xff09;Sobel算子 Sobel算子是一种基于梯度的边缘检测算法。它通过对图像进行卷积操作来计算图像的梯度&#xff0c;并将梯度的大小作为边缘的强度。它使用两个3x3的卷积核&#xff0c;分别用于计…

C语言编程笔记:文件处理的艺术

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 本文目录 引言正文一、为什么要用文件二、文件的分…

头歌答案--爬虫实战

目录 urllib 爬虫? 第1关&#xff1a;urllib基础 任务描述 第2关&#xff1a;urllib进阶? 任务描述 requests 爬虫 第1关&#xff1a;requests 基础 任务描述 第2关&#xff1a;requests 进阶 任务描述 网页数据解析 第1关&#xff1a;XPath解析网页? 任务描述…

【JavaEE】Spring Web MVC

目录 一、Spring Web MVC简介 1.1 MVC简介1.2 Spring MVC1.3 RequestMapping注解1.3.1 使用1.3.2 RequestMapping的请求设置 1.3.2.1 方法11.3.2.2 方法2 二、Postman介绍 2.1 创建请求2.2 界面如下&#xff1a;2.3 传参介绍 一、Spring Web MVC简介 官方文档介绍&#xff…

Sqlmap入门

原理 在owasp发布的top10 漏洞里面&#xff0c;注入漏洞一直是危害排名第一&#xff0c;其中数据库注入漏洞是危害的。 当攻击者发送的sql语句被sql解释器执行&#xff0c;通过执行这些恶意语句欺骗数据库执行&#xff0c;导致数据库信息泄漏 分类 按注入类型 常见的sql注入…

RabbitMQ基础篇

文章目录 1 RabbitMQ概述1.1 消息队列1.2 RabbitMQ体系结构 2 RabbitMQ工作模式2.1 简单模式&#xff08;Simple Queue&#xff09;2.2 工作队列模式&#xff08;Work Queues&#xff09;2.3 发布/订阅模式&#xff08;Publish/Subscribe&#xff09;2.4 路由模式&#xff08;R…

javaEE初阶————多线程初阶(2)

今天给大家带来第二期啦&#xff0c;保证给大家讲懂嗷&#xff1b; 1&#xff0c;线程状态 NEW安排了工作还未开始行动RUNNABLE可工作的&#xff0c;或者即将工作&#xff0c;正在工作BLOCKED排队等待WAITING排队等待其他事TIMED_WAITING排队等待其他事TERMINATED工作完成了 …

于灵动的变量变幻间:函数与计算逻辑的浪漫交织(下)

大家好啊&#xff0c;我是小象٩(๑ω๑)۶ 我的博客&#xff1a;Xiao Xiangζั͡ޓއއ 很高兴见到大家&#xff0c;希望能够和大家一起交流学习&#xff0c;共同进步。 这一节我们主要来学习单个函数的声明与定义&#xff0c;static和extern… 这里写目录标题 一、单个函数…