【go语言】条件,选择,循环和特殊语句

2023-09-21 16:59:05

if语句

a:=10
if a>20{
	fmt.Printf("a大于20")
}else if a<10{
	fmt.Printf("a小于10")
}else{
	fmt.Printf("a大于等于10,a小于等于20")
}

go语言的if语句和C语言的if语句的差不多,需要注意的是else 和else if要写在括号右边;go语言的if语句还可以有一个子语句

if语句的子语句

if语句的子语句的作用是用来初始化局部变量

if a:=10;a<20{
    fmt.Printf("a小于20")
}else{
    fmt.Printf("a小于20")
}

但要注意的是,子语句中只能有一个表达式

switch语句

switch语句有两种类型

  • 表达式switch
  • 类型switch

表达式switch

表达式switch的一种写法和C语言的switch类似,不过没有break语句。

	grade:=80
	switch grade{
	case 60:
		fmt.Println("及格")
	case 80:
		fallthrough
	case 90:
		fmt.Println("优秀")
	}

fallthrough关键字的作用是把case的控制权交给下一个case,这个程序输出优秀
在这里插入图片描述

grade:=80
switch{
	case grade>=60:
		fmt.Println("及格了")
	case grade<60:
		fmt.Println("没有及格")
	}

类型switch

var x interface{}
x=1
switch i:=x.(type){
case int:
	fmt.Printf("x的类型是%T\n",i)
case float64:
	fmt.Printf("x的类型是%T",i)
default:
	fmt.Println("其他类型");
}

在这里插入图片描述

类型switch判断的变量必须是具有接口类型的变量

循环语句

go语言只有for循环没有while循环

for循环的几种形式

for initialization;condition;post{}

for i:=0;i<5;i++{
	fmt.Println(i)
} 

在这里插入图片描述

1for ;condition;post{}

for ;i<5;i++{
	fmt.Println(i)
}

在这里插入图片描述

for condition{} 相当于while循环

for{} 死循环

for range

str:="abcd"
for i,ch:=range str{
	fmt.Printf("字符串的第%d个字符值为%d",i,ch)
}
for _,ch:=range str{
	fmt.Println(ch)
}
for i,_:=range str{
	fmt.Println(i)
}

在这里插入图片描述

for和range结合可以轮询字符串的每一个字符,这种方式也可以用来轮询数组、切片、字典等。range返回的是一对 索引–值

延迟语句defer

defer用来延迟调用一个函数(在函数的最后执行),只能在一个函数内部使用
而且函数是执行完所有defer语句才执行return语句的。

func main(){
	defer fmt.Println("好")
	fmt.Println("你")
}

在这里插入图片描述

那么在一个函数内有多个defer语句会以什么顺序执行?
最后的defer语句最先执行,defer语句就是一个栈。

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

在这里插入图片描述

break语句

var i int =0
for{
	if i>5{
		break
	}
	i++
	fmt.Println("for循环结束了?")
}
fmt.Println("for循环结束了")

在这里插入图片描述

go语言的break有一个比较坑的地方

for{
	grade:=80
	switch{
	case grade>60:
		fmt.Println("及格了")
		break
	case grade==60:
		fmt.Println("差点没及格")
	case grade<60:
		fmt.Println("没有及格")

	}
}

这个时候break根本就不会跳出for循环,也就是说这个循环还是个死循环!!!要想跳出这个循环就必须要用标签
在这里插入图片描述

loop:for{
	grade:=80
	switch{
	case grade>60:
		fmt.Println("及格了")
		break loop
	case grade==60:
		fmt.Println("差点没及格")
	case grade<60:
		fmt.Println("没有及格")
	}
}

在这里插入图片描述

更多推荐

css3动画基础详解(@keyframes和animation)

动画是使元素从一种样式逐渐变化为另外一种效果,CSS3动画的生成,主要依赖@keyframes定义动画,animation执行动画。@keyframes通过@keyframes规则创建动画。@keyframeskeyframes-name{keyframes-selector{css-styles;}}keyframe

【数据结构】哈希表(详)

文章目录前言正文一、基本概念二、基本原理1.哈希函数1.1直接定址法(常用)1.2除留余数法(常用)1.3平方取中法(了解)1.4折叠法(了解)1.5随机数法(了解)1.6数学分析法(了解)2.哈希冲突2.1平均查找长度2.2负载因子2.3闭散列(开放定制法)2.1.1线性探测2.1.2二次探测2.1.3二重哈希2.4

MySQL 8.0 OCP (1Z0-908) 考点精析-架构考点5:数据字典(Data Dictionary)

文章目录MySQL8.0OCP(1Z0-908)考点精析-架构考点5:数据字典(DataDictionary)File-basedMetadataStorage(基于文件的元数据存储)TransactionalDataDictionary(事务数据字典)SerializedDictionaryInformation(S

相机One Shot标定

1原理说明原理部分网上其他文章[1][2]也已经说的比较明白了,这里不再赘述。2总体流程参考论文作者开源的Matlab代码[3]和github上的C++代码[4]进行说明(不得不说还是Matlab代码更优雅)论文方法总体分两部,第一部是在画面中找到所有的类棋盘格角点,第二步是角点的基础上构建出棋盘格形状。3模块说明3.

【Verilog 教程】3.1 Verilog 连续赋值

关键词:assign,全加器连续赋值语句是Verilog数据流建模的基本语句,用于对wire型变量进行赋值。:格式如下assignLHS_target=RHS_expression;LHS(lefthandside)指赋值操作的左侧,RHS(righthandside)指赋值操作的右侧。assign为关键词,任何已经声

Redis面试二“缓存击穿是什么”

条件缓存击穿是应为Redis某个缓存数据设置了过期时间,而刚好有大并发数据请求这个数据,导致DB有大量请求,引发DB崩溃。第一种方法就是设置互称锁当缓存失效时不立即删除缓存而是用setnx设置一个互斥锁,当操作完成后在loaddb,并回设缓存,否则重试get缓存方法,这样就减少了直接大量访问DB的请求。实现@Servi

Java高级-动态代理

动态代理1.介绍2.案例1.介绍publicinterfaceStar{Stringsing(Stringname);voiddance();}publicclassBigStarimplementsStar{privateStringname;publicBigStar(Stringname){this.name=n

关于ClickHouse的SQL操作

目录clickhouse和mysql的比较5.1create5.2Insert1.标准INSERT2.从表到表的插入5.3Update和Delete1.删除操作2.修改操作clickhouse和mysql的比较共同点:都是关系型数据库,支持SQL查询语言;支持事务处理,具备ACID特性(原子性、一致性、隔离性、持久性)

【多尺度无监督:Pansharpening】

Mun-GAN:AMultiscaleUnsupervisedNetworkforRemoteSensingImagePansharpening(Mun-GAN:一种多尺度无监督遥感图像泛锐化网络)在遥感图像融合中,全色锐化是一种遥感图像融合方法,旨在融合全色(PAN)图像和多光谱(MS)图像,以产生高分辨率的MS(H

ClickHouse(15)ClickHouse合并树MergeTree家族表引擎之GraphiteMergeTree详细解析

GraphiteMergeTree该引擎用来对Graphite数据(图数据)进行瘦身及汇总。对于想使用ClickHouse来存储Graphite数据的开发者来说可能有用。如果不需要对Graphite数据做汇总,那么可以使用任意的ClickHouse表引擎;但若需要,那就采用GraphiteMergeTree引擎。它能减

主打低功耗物联网国产替代,纵行科技ZT1826芯片以速率和灵敏度出圈

在低功耗物联网领域,国产替代的趋势越演越烈。9月20日,纵行科技在“IOTE2023深圳·物联网通信技术与应用高峰论坛”发表了“自主原创AdvancedM-FSK®调制技术助力国产替代和泛在物联”的演讲,并推出了ZT1826芯片,以“更低功耗、更低成本、更高性能”为差异化优势,想在低功耗物联网赛道上开辟出一条“国产替代

热文推荐