Go语言之条件判断循环语句(if-else、switch-case、for、goto、break、continue)

news2024/11/28 20:56:08

一、if-else条件判断语句

  • Go中的if-else条件判断语句跟C++差不多。但是需要注意的是,Go中强制规定,关键字if和else之后的左边的花括号"{“必须和关键字在同一行,若使用了else if结构,则前段代码快的右花括号”}"必须和关键字else if在同一行。
  • Go和C++不同的是,条件判断语句不需要小括号"()"括起来
package main

import "fmt"

func main() {
	var num int = 100
	if num == 0{//{必须同一行
		fmt.Println("aaaaaa")
	}else if num == 10{//必须同一行
		fmt.Println("bbbbbb")
	}else if num == 100{
		fmt.Println("cccccc")
	}else{
		fmt.Println("eeeeeeee")
	}
}
  • 与C++不同的特殊写法,num:=10是一个语句,执行完之后,num==0才是判断表达式
    package main
    
    import "fmt"
    
    func main() {
    	
    	if num:=10; num==0 { //{必须同一行
    		fmt.Println("aaaaaa")
    	}
    }
    

二、switch-case语句

  • 与C++不同的是,在Go语言中,case是一个独立的代码块,执行完毕后并不会紧接着执行下一个case,所以不需要执行完一个case之后break;但是为了兼容一些移植代码,依然加入了fallthough关键字来实现执行完case语句之后紧接着执行下一个case语句。
package main

import (
	"fmt"
)

func main() {

	s := "hello"
	i := 15
	switch {
	case s == "hello":
		fmt.Println("hello")
		fallthrough
	case s == "world":
		fmt.Println("world")
		fallthrough//强行执行下个case语句
	case i >= 15 && i < 20://分支可以用表达式
		fmt.Println("!!!!呀呀呀")
	default:
		fmt.Println("bbbbb")
	}

	str2 := "math"
	switch  str2{
	case "hhhh","math"://一个分支可以对应多个值
		fmt.Println("math")
		fallthrough
	case "aaaaa":
		fmt.Println("math222")
	case "cccc":
		fmt.Println("math333333")
		fallthrough
	default:
		fmt.Println("qqqqqqq")
	}
}

结果:在这里插入图片描述

三、for循环语句

  • 与C++不同,Go语言中的循环语句只支持for关键字,并不支持while和do-while结构

  • 例子:

    package main
    
    import "fmt"
    
    func main() {
    	for i:= 0; i < 10; i++{
    		fmt.Printf(" %d ",i)
    	}
    }
    

    结果:在这里插入图片描述

  • for的初始语句可以被忽略

  • for的条件表达式也可以被忽略

  • for只有一个条件的循环

    package main
    
    import "fmt"
    
    func main() {
    	//1.忽略for的初始语句
    	i := 0
    	for ; i<10 ; i++{
    		fmt.Printf(" %d ",i)
    	}
    
    	fmt.Println()
        //2.忽略for的条件表达式
        for j:=0; ;j++{
    	    if j > 10{
    		    break
    	    }
    	   fmt.Printf(" %d ",j)
        }
    
        fmt.Println()
        //3.for忽略第三条语句
        for j:=0;j<10; {
    	    fmt.Printf(" %d ",j)
    	    j++
        }
    
        fmt.Println()
        //4.for只有一个条件的循环
        var k int=0
        for k <= 10{
    	    fmt.Printf(" %d ",k)
    	    k++
        }
    }
    

    结果:在这里插入图片描述

  • for也可以无限循环

    package main
    
    import "fmt"
    
    func main() {
    	//4.for实现无限循环
    	for ; ; {
    		fmt.Printf("aaa")
    
    	}
    }
    

四、goto/break/continue跳出循环

1.goto

  • goto关键字是跳出多层循环,跳转到循环外面,执行标签内的语句
package main

import "fmt"

func main() {
	for i:=0; i<10; i++{
		for j:=0; j<10; j++{
			fmt.Printf(" i:%d ", i)
			fmt.Printf(" j:%d ", j)
			if j==3{
				goto goHereLa //跳出循环,跳转到标签语句
			}
		}
	}
	
	fmt.Println("\n不会到这噢,直接跳过,去goHereLa标签内")//不会打印
	return //手动返回,避免函数执行进入了标签代码中

goHereLa:
	fmt.Println("\nthere le la la la,到这啦")
}

结果:在这里插入图片描述

2.break

  • break和goto一样,可以跟上标签,但是表示退出某个标签对应的代码块,标签要求必须定义在对应for, switch和select代码块上方
package main

import "fmt"

func main() {

goHereLa:
	for i:=0; i<10; i++{
		for j:=0; j<10; j++{
			fmt.Printf(" i:%d ", i)
			fmt.Printf(" j:%d ", j)
			if j==3{
				break goHereLa //跳出标签goHereLa里的代码块。即跳出循环外
			}
		}
	}
	fmt.Println("\n到这啦,循环语句外面")//会打印
}

结果:
在这里插入图片描述

3.continue

  • Go中的continue和C++中并没有什么不一样,都是跳出本次循环继续下次循环。但是多加了一个功能,即也可以像break一样加上标签,表示开始标签对应的循环,并仅限于for循环中使用
package main

import "fmt"

func main() {
goHereLa:
	for i:=0; i<5; i++{
		fmt.Printf("\n i:%d ", i)
		for j:=0; j<10; j++{
			fmt.Printf(" j:%d ", j)
			if j==3{
				continue goHereLa //跳出标签goHereLa里的代码块。即跳出本次循环,继续下次循环
			}
			fmt.Println("当j是3之后不会打这个噢,直接跳出本次循环啦")
		}
	}
	fmt.Println("\n到这啦,循环语句外面")
}

结果:
在这里插入图片描述

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

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

相关文章

Navicat连接centos7 mysql失败解决思路

Navicat连接centos7 mysql失败&#xff0c;可以从一下的几个问题进行逐个排查。1、远程登录权限查看远程登录权限root用户的host值为localhost时&#xff0c;说明只能进行本地登录&#xff0c;需要将host改为“%”&#xff1b;UPDATE mysql.user SET host % WHERE user root;…

Java -数据结构,Map Set

一、搜索 1.1、概念及场景 Map和set是一种专门用来进行搜索的容器或者数据结构&#xff0c;其搜索的效率与其具体的实例化子类有关。以前常见的 搜索方式有&#xff1a; 直接遍历&#xff0c;时间复杂度为O(N)&#xff0c;元素如果比较多效率会非常慢二分查找&#xff0c;时间…

Mysql多数据库之间表简单同步

方案&#xff1a;触发器优点&#xff1a; 工作效率和开发效率上有很大的提高缺点&#xff1a; 增加数据库服务器的开销在同一个mysql实例中&#xff1a;在数据库sakila中创建insert触发器use sakila; mysql> delimiter $$ mysql> create trigger insert_trigger after in…

奇安信天眼系统——探针/分析平台部署及联动

奇安信天眼系统——探针/分析平台部署及联动一 概述二 探针/分析平台部署及联动流量传感器&#xff08;探针&#xff09;分析平台一 概述 奇安信天眼主要包括威胁情报、分析平台、传感器和文件威胁鉴定器四个模块组成。 一般仅需分析平台&#xff0c;流量传感器&#xff08;探…

MySQL专题(学会就毕业)

MySQL专题0.准备sql设计一张员工信息表&#xff0c;要求如下&#xff1a;编号&#xff08;纯数字&#xff09;员工工号 (字符串类型&#xff0c;长度不超过10位)员工姓名&#xff08;字符串类型&#xff0c;长度不超过10位&#xff09;性别&#xff08;男/女&#xff0c;存储一…

研讨会回顾 | Perforce发布数字资产管理工具Helix DAM,帮助您按时按预算交付虚拟产品

2023年2月28日&#xff0c;龙智联合全球领先的数字资产管理和DevSecOps工具厂商Perforce共同举办Perforce on Tour网络研讨会——“赋能‘大’研发&#xff0c;助力‘快’交付”。 研讨会上&#xff0c;Perforce解决方案工程师Kory Luo分享了Perforce版本控制软件Helix Core的产…

Transformer:Attention is All You Need

【Transformer论文逐段精读【论文精读】】 https://www.bilibili.com/video/BV1pu411o7BE/?share_sourcecopy_web&vd_source30e93e9c70e5a43ae75d42916063bc3b论文地址&#xff1a;[1706.03762] Attention Is All You Need (arxiv.org)Transformer第一个完全依靠自我注意来…

0-1背包问题(二维数组压缩为一维数组)

0-1背包不懂的&#xff0c;可以看这篇 https://donglin.blog.csdn.net/article/details/129412502 一维dp数组 对于背包问题其实状态都是可以压缩的。 在使用二维数组的时候&#xff0c;递推公式&#xff1a;dp[i][j] max(dp[i - 1][j], dp[i - 1][j - weight[i]] value[i]…

leetcode 875. Koko Eating Bananas(koko吃香蕉)

piles数组里面是每堆香蕉里面有多少个香蕉&#xff0c; 现在有h小时可以吃香蕉&#xff0c;每小时只能吃一个堆&#xff0c; 定义每小时能吃k个香蕉&#xff0c;k > piles[i], 那么第 i 堆一次吃完&#xff0c;否则下一小时继续吃。 问k为多少时可以在h小时内把香蕉吃完。 …

Ubantu docker学习笔记(一) docker安装

文章目录一、安装准备工作二、安装docker三、问题四、docker镜像配置五、docker常见命令1.新建启动容器2.列出当前所有正在运行的容器3.退出容器4.启动已停止运行的容器5.重启容器6.停止容器7.强制停止容器 &#xff08;还在运行的&#xff09;8.删除已停止的容器重要的后台守护…

只做笔记有必要买apple pencil吗?苹果笔的代替笔推荐

如果仅仅使用IPAD来进行打游戏和看剧的话&#xff0c;未免有些浪费。ipad的作用还是挺大的&#xff0c;可以用来做学习笔记&#xff0c;也可以用来做绘画&#xff0c;也可以用来做一些重要的内容。很多人都会认为&#xff0c;苹果的电容笔很好用&#xff0c;但是价格上要比一般…

交流电机驱动器中的隔离电压感应

汽车和工业终端设备&#xff0c;如电机驱动器、串式逆变器和机载充电器&#xff0c;在高电压下运行&#xff0c;不能安全地与人直接互动。隔离电压测量通过保护人类免受高压电路执行一个功能的影响&#xff0c;有助于优化操作和确保使用的安全性。 设计用于高性能&#xff0c;隔…

Jquery项目中使用vue.js

大家在工作的情况中&#xff0c;可能会遇到之前的老项目采用jq书写&#xff0c;或者修改或者新增功能在jq中&#xff0c;原始jq的项目,代码可维护性很差,一个页面几千行jq,可维护性很差,工作量巨大&#xff0c;所以这个时候大家可以引入vue.js。 第一步&#xff1a;引入vue.js…

Proj-9.0.0源码编译(Windows)

源码下载&#xff1a;下载地址官网教程&#xff1a;官网教程使用osgeo4w在线安装&#xff0c;时间较长且到后面会报错&#xff0c;尝试多次无法安装成功&#xff0c;只能切换源代码编译安装&#xff0c;官网教程如下&#xff1a;&#xff08;补充一下对vcpkg的简单介绍&#xf…

音质好的运动蓝牙耳机有哪些、最好的运动蓝牙耳机推荐清单

而作为一名运动爱好者&#xff0c;我非常喜欢在运动时听音乐&#xff0c;简直不要太轻松&#xff01;不过在换了多款蓝牙耳机之后&#xff0c;我终于找到了几款非常适合运动的耳机&#xff0c;戴着它们运动&#xff0c;不仅不会出现不适感&#xff0c;还能享受清晰动听音乐&…

executor行为相关Spark sql参数源码分析

0、前言 参数名和默认值spark.default.parallelismDefault number of partitions in RDDsspark.executor.cores1 in YARN mode 一般默认值spark.files.maxPartitionBytes134217728(128M)spark.files.openCostInBytes4194304 (4 MiB)spark.hadoop.mapreduce.fileoutputcommitte…

snap使用interface:content的基础例子

snap做包还在学习阶段&#xff0c;官网文档可查看&#xff1a;The content interface | Snapcraft documentation该例子由publiser和consumer两部分组成&#xff0c;一个提供一个只读的数据区&#xff0c;一个来进行读取其中的信息&#xff0c;这样就完成了content的交互。publ…

华为机试题:HJ90 合法IP(python)

文章目录&#xff08;1&#xff09;题目描述&#xff08;2&#xff09;Python3实现&#xff08;3&#xff09;知识点详解1、input()&#xff1a;获取控制台&#xff08;任意形式&#xff09;的输入。输出均为字符串类型。1.1、input() 与 list(input()) 的区别、及其相互转换方…

ICASSP 2023论文模型开源|语音分离Mossformer

人类能在复杂的多人说话环境中轻易地分离干扰声音&#xff0c;选择性聆听感兴趣的主讲人说话。但这对机器却不容易&#xff0c;如何构建一个能够媲美人类听觉系统的自动化系统颇具挑战性。 本文将详细解读ICASSP2023本届会议收录的单通道语音分离模型Mossformer论文&#xff0…

EXCEL职业版本(3)

Excel职业版本&#xff08;3&#xff09; 公式与函数 运算符 算数运算符 关系运算符 地址的引用 相对引用&#xff1a;你变它就变&#xff0c;如影随形 A2&#xff1a;A5 绝对引用&#xff1a;以不变应万变 $A$2 混合引用&#xff1a;识时务者为俊杰&#xff0c;根据时…