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

Go语言入门-流程控制语句

流程控制

Go语言中有以下几种常见的流程控制语句:

  1. 条件语句(Conditional Statements):

    • if语句:用于根据条件执行代码块。
    • else语句:在if条件不满足时执行的语句块。
    • else if语句:用于在多个条件之间进行判断。
    age := 20if age >= 18 {fmt.Println("成年人")
    } else {fmt.Println("未成年人")
    }score := 85
    if score >= 90 {fmt.Println("优秀")
    } else if score >= 80 {fmt.Println("良好")
    } else {fmt.Println("及格")
    }
    
  2. 循环语句(Loop Statements):

    • for循环:用于重复执行一段代码块,可以指定循环条件、初始语句和后续语句。
    • range循环:用于遍历数组、切片、字符串、映射等数据结构中的元素。
    // for循环
    for i := 1; i <= 5; i++ {fmt.Println(i)
    }
    //for遍历string
    str := "hello,nihao"
    fmt.Println(str)
    fmt.Println("字符串str长度为:", len(str))
    for i := 0; i < len(str); i++ {//fmt.Printf("字节打印:", str[i]) //直接打印是字符的编码fmt.Printf("%c", str[i])
    }
    // range循环
    numbers := []int{1, 2, 3, 4, 5}
    for index, value := range numbers {fmt.Printf("索引:%d,值:%d\n", index, value)
    }
    //range遍历string
    for i, v := range str {fmt.Printf("索引位置:%d的值为:%c\n", i, v)//索引位置:0的值为:h
    }
    
  3. 选择语句(Selection Statements):

    • switch语句:根据表达式的值选择执行不同的分支。
    num := 2switch num {
    case 1:fmt.Println("选择了1")
    case 2:fmt.Println("选择了2")
    default:fmt.Println("未知选择")
    }fruit := "apple"
    switch fruit {
    case "apple", "pear":fmt.Println("选择了苹果或梨子")
    case "banana":fmt.Println("选择了香蕉")
    default:fmt.Println("未知选择")
    }
    
  4. 跳转语句(Jump Statements):

    • break语句:用于跳出当前循环或switch语句。
    • continue语句:用于跳过当前循环的剩余代码并开始下一次迭代。
    • goto语句:无条件地转移到指定标签的语句。
    for i := 1; i <= 5; i++ {if i == 3 {break // 当i等于3时跳出循环}fmt.Println(i) // 1 2}for i := 1; i <= 5; i++ {if i == 3 {continue // 当i等于3时跳过本次循环,继续下一次循环}fmt.Println(i) //1 2 4 5}i := 0
    Loop:for {i++if i == 3 {goto Loop // 跳转到Loop标签处继续执行循环} else if i == 5 {break Loop // 在第5次循环时跳出循环}fmt.Println(i)//1 2 4}
    

除了上述常见的流程控制语句,Go语言还提供了一些其他的关键字和语句来处理程序的流程控制,如:

  • fallthrough:在switch语句中,用于贯穿到下一个分支的代码块。

    默认情况下,当一个分支的条件满足时,switch语句会执行该分支并终止,不会继续执行其他分支。但是,如果在某个分支使用了fallthrough关键字,那么即使该分支的条件满足,程序也会继续执行下一个分支,无论下一个分支的条件是否满足。

    num := 2switch num {
    case 1:fmt.Println("数字是1")
    case 2:fmt.Println("数字是2")fallthrough
    case 3:fmt.Println("数字是3")
    default:fmt.Println("未知数字")
    }
    

    输出结果:

    数字是2
    数字是3
    
  • select:用于在多个通道操作中进行选择和执行。

    select语句用于在多个通道操作中进行选择和执行。它类似于switch语句,但是针对通道操作。select语句会监听多个通道的操作,一旦有某个通道操作可以进行,就会执行对应的代码块。

    package mainimport ("fmt""time"
    )func main() {ch1 := make(chan string)ch2 := make(chan string)go func() {time.Sleep(2 * time.Second)ch1 <- "Hello from channel 1"}()go func() {time.Sleep(1 * time.Second)ch2 <- "Hello from channel 2"}()select {case msg1 := <-ch1:fmt.Println(msg1)case msg2 := <-ch2:fmt.Println(msg2)}
    }
    

    输出结果:

    Hello from channel 2
    

    因为ch2通道的操作先准备好了,所以程序执行对应的代码块。

  • defer:用于延迟执行函数调用,通常用于释放资源或错误处理。

    defer用于延迟执行函数调用,通常用于释放资源或错误处理。被defer关键字修饰的函数调用会在包含它的函数执行完毕后才执行,即使函数发生了错误也会执行。

    示例代码:

    goCopy Codepackage mainimport "fmt"func main() {defer fmt.Println("这行代码会最后执行")fmt.Println("这行代码会第一个执行")
    }
    

    输出结果:

    这行代码会第一个执行
    这行代码会最后执行
    

    defer语句会将函数调用推迟到包含它的函数执行完毕后执行。

    defer还可以用于关闭文件、释放锁、清理资源等操作,确保在函数结束时这些操作一定会执行,不受返回或错误的影响。

相关文章:

Go语言入门-流程控制语句

流程控制 Go语言中有以下几种常见的流程控制语句&#xff1a; 条件语句&#xff08;Conditional Statements&#xff09;&#xff1a; if语句&#xff1a;用于根据条件执行代码块。else语句&#xff1a;在if条件不满足时执行的语句块。else if语句&#xff1a;用于在多个条件之…...

深入探究ASEMI肖特基二极管MBR60100PT的材质

编辑-Z 在电子零件领域中&#xff0c;肖特基二极管MBR60100PT因其出色的性能和广泛的应用而显得尤为关键。理解其材质不仅有助于我们深入理解其运作原理&#xff0c;也有助于我们做出更合适的电子设计。那么&#xff0c;肖特基二极管MBR60100PT是什么材质呢? 首先&#xff0c…...

python类模拟“对战游戏”

Game类含玩家昵称、生命值、攻击力(整数)&#xff0c;暴击率、闪避率(小数)&#xff0c;在魔术方法init定义&#xff1b;attack方法中实现两个Game实例对战模拟。 (本笔记适合初通Python类class的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.py…...

Maven第二章:Maven基本概念与生命周期

Maven第二章&#xff1a;Maven基本概念与生命周期 前言 本章主要内容&#xff0c;介绍Maven基本概念&#xff0c;包括maven坐标含义&#xff0c;命名规则&#xff0c;继承与聚合、了解与理解生命周期&#xff0c;如何通过Maven进行依赖和版本管理。 什么是Maven的坐标&#xf…...

<蓝桥杯软件赛>零基础备赛20周--第3周--填空题

报名明年4月蓝桥杯软件赛的同学们&#xff0c;如果你是大一零基础&#xff0c;目前懵懂中&#xff0c;不知该怎么办&#xff0c;可以看看本博客系列&#xff1a;备赛20周合集 20周的完整安排请点击&#xff1a;20周计划 每周发1个博客&#xff0c;共20周&#xff08;读者可以按…...

【Linux】VM及WindowsServer安装

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《微信小程序开发实战》。&#x1f3af;&#x1f3a…...

【实用教程】MySQL内置函数

1 背景 在MySQL查询等操作过程中&#xff0c;我们需要根据实际情况&#xff0c;使用其提供的内置函数。今天我们就来一起来学习下这些函数&#xff0c;在之后的使用过程中更加得心应手。 2 MySQL函数 2.1 字符串函数 常用的函数如下&#xff1a; concat(s1,s2,…sn)字符串…...

第十二节——ref

一、概念 ref 被用来给DOM元素或子组件注册引用信息。引用信息会根据父组件的 $refs 对象进行注册。如果在普通的DOM元素上使用&#xff0c;引用信息就是元素; 如果用在子组件上&#xff0c;引用信息就是组件实例。 注意&#xff1a;只要想要在Vue中直接操作DOM元素&#xff…...

少儿编程 2023年9月中国电子学会图形化编程等级考试Scratch编程四级真题解析(判断题)

2023年9月scratch编程等级考试四级真题 判断题(共10题,每题2分,共20分) 11、运行程序后,变量"result"的值是6 答案:对 考点分析:考查积木综合使用,重点考查自定义积木的使用 图中自定义积木实现的功能是获取两个数中最大的那个数并存放在result变量中,左…...

【设计模式三原则】

设计模式三原则 单一职责原则开放封闭原则依赖倒转原则里氏代换原则 我们在进行程序设计的时候&#xff0c;要尽可能地保证程序的可扩展性、可维护性和可读性&#xff0c;所以需要使用一些设计模式&#xff0c;这些设计模式都遵循了以下三个原则&#xff0c;下面来依次为大家介…...

600MW发电机组继电保护自动装置的整定计算及仿真

摘要 随着科技的发展&#xff0c;电力已成为最重要的资源之一&#xff0c;如何保证电力的供应对于国民经济发展和人民生活水平的提高都有非常重要的意义。在电能输送过程中&#xff0c;发电机组是整个过程中最重要的一个基本元素&#xff0c;在电力系统中的输送和分配中被广泛应…...

【蓝桥每日一题]-字符串(保姆级教程 篇1)#atcoder324C~E题

今天来讲字符串题型 目录 题目&#xff1a;atcoder324C题 思路&#xff1a; 题目&#xff1a;atcoder324D题 思路&#xff1a; 题目&#xff1a;atcoder324E题 思路&#xff1a; 题目&#xff1a;atcoder324C题 给一个T字符串&#xff0c;然后给出n个S串&#xff0c;对…...

4.2.1 SQL语句、索引、视图、存储过程

怎么执行一条select语句 1.连接器 接收连接-》管理连接-》校验用户信息 2.查询缓存 kv存储&#xff0c;命中直接返回&#xff0c;否则继续执行 8.0已经删除 3.分析器 词法句法分析生成语法树 4.优化器 指定执行计划&#xff0c;选择查询成本最小的计划 5.执行器 根据执行计划&a…...

1992-2021年全国各地级市经过矫正的夜间灯光数据(GNLD、VIIRS)

1992-2021年全国各地级市经过矫正的夜间灯光数据&#xff08;GNLD、VIIRS&#xff09; 1、时间&#xff1a;1992-2021年3月&#xff0c;其中1992-2013年为年度数据&#xff0c;2013-2021年3月为月度数据 2、来源&#xff1a;DMSP、VIIRS 3、范围&#xff1a;分区域汇总&…...

机器人的触发条件有什么区别,如何巧妙的使用

简介​ 维格机器人触发条件,分为3个,分别是: 有新表单提交时、有记录满足条件时、有新的记录创建时 。 看似3个,其实是能够满足我们非常多的使用场景。 本篇将先介绍3个条件的触发条件,然后再列举一些复杂的触发条件如何用现有的触发条件来满足 注意: 维格机器人所有的…...

【Qt6】QStringList

2023年10月31日&#xff0c;周二上午 QStringList 是 Qt 中的一个类&#xff0c;用于存储一组字符串。它提供了一些方便的方法来操作和管理字符串列表。 QStringList 可以用于存储任意数量的字符串&#xff0c;并提供了一些常用的操作&#xff0c;例如添加、删除、查找、排序等…...

代码随想录算法训练营第五十三天|309.最佳买卖股票时机含冷冻期 ● 714.买卖股票的最佳时机含手续费

309. 买卖股票的最佳时机含冷冻期 int maxProfit(int* prices, int pricesSize){int len pricesSize;int dp[len][4];dp[0][0] -prices[0];dp[0][1] 0;dp[0][2] 0;dp[0][3] 0;for (int i 1; i < pricesSize; i){dp[i][0] fmax(dp[i-1][0], fmax(dp[i-1][1] - prices…...

厚黑学笔记

厚黑学 我现在的情况就是在听书听到一半&#xff0c;但在软件上看书已经看完了&#xff0c;厚黑学要讲的东西大概已经摸清楚了。 总体来说&#xff0c;厚黑学里面的章节内容有一点沾边的嫌疑&#xff08;看完后的想法)&#xff0c;但这本书还是有值得阅读的&#xff0c;但主讲…...

IDEA MyBatisX插件介绍

一、前言 前几年写代码的时候&#xff0c;要一键生成DAO、XML、Entity基础代码会采用第三方工具&#xff0c;比如mybatis-generator-gui等&#xff0c;现在IDEA或Eclipse都有对应的插件&#xff0c;像IDEA中MyBatisX就是一个比较好用的插件。 二、MyBatisX安装配置使用 MyBa…...

【PyQt学习篇 · ②】:QObject - 神奇的对象管理工具

文章目录 QObject介绍Object的继承结构测试QObject对象名称和属性QObject对象名称和属性的操作应用场景 QObject父子对象QObject父子对象的操作 QObject的信号与槽QObject的信号与槽的操作 QObject介绍 在PyQt中&#xff0c;QObject是Qt框架的核心对象之一。QObject是一个基类…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用

在工业制造领域&#xff0c;无损检测&#xff08;NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统&#xff0c;以非接触式光学麦克风技术为核心&#xff0c;打破传统检测瓶颈&#xff0c;为半导体、航空航天、汽车制造等行业提供了高灵敏…...