GO流程控制

1. if else

在Go语言中,关键字if是用于测试某个条件(布尔型或逻辑型)的语句,如果该条件成立,则会执行 if 后由大括号{}括起来的代码块,否则就忽略该代码块继续执行后续的代码。

if condition {// 条件为真执行
}

condition 称之为条件表达式或者布尔表达式,执行结果需返回true或false。{ 必须在条件表达式的尾部

x := 0if x <= 0 {fmt.Println("为真进入这里")}

如果存在第二个分支,则可以在上面代码的基础上添加 else 关键字以及另一代码块,这个代码块中的代码只有在条件不满足时才会执行,if 和 else 后的两个代码块是相互独立的分支,只能执行其中一个。

if condition {// 条件为真 执行
} else {// 条件不满足 执行
}

x := 5if x <= 0 {fmt.Println("为真进入这里")//go语言格式要求很严,else必须写在}后面}else{fmt.Println("为假进入这里")}

如果存在第三个分支,则可以使用下面这种三个独立分支的形式:

if condition1 {// condition1 满足 执行
} else if condition2 {// condition1 不满足 condition2满足 执行
}else {// condition1和condition2都不满足 执行
}

else if 分支的数量是没有限制的,但是为了代码的可读性,还是不要在 if 后面加入太多的 else if 结构

if语句可以嵌套:

/* 定义局部变量 */var a int = 100var b int = 200/* 判断条件 */if a == 100 {/* if 条件语句为 true 执行 */if b == 200 {/* if 条件语句为 true 执行 */fmt.Printf("a 的值为 100 , b 的值为 200\n" )}}

1.1 特殊写法

if 还有一种特殊的写法,可以在 if 表达式之前添加一个执行语句,再根据变量值进行判断,代码如下:

	if a := 10; a > 5 {fmt.Println(a)  //10}

这种写法可以将返回值与判断放在一行进行处理,而且返回值的作用范围被限制在 if、else 语句组合中。

在编程中,变量的作用范围越小,所造成的问题可能性越小,每一个变量代表一个状态,有状态的地方,状态就会被修改,函数的局部变量只会影响一个函数的执行,但全局变量可能会影响所有代码的执行状态,因此限制变量的作用范围对代码的稳定性有很大的帮助

2. for

go语言中的循环语句只支持 for 关键字,这个其他语言是不同的。

sum := 0
//i := 0; 赋初值,i<10 循环条件 如果为真就继续执行 ;i++ 后置执行 执行后继续循环
for i := 0; i < 10; i++ {sum += i
}

第二种写法:

sum := 0
for {sum++if sum > 100 {//break是跳出循环break}
}

上述的代码,如果没有break跳出循环,那么其将无限循环

第三种写法:

n := 10
for n>0 {n--fmt.Println(n)
}

我们来看下面一种写法:

step := 2
//初值可以省略,但是;必须有,但是这样写step的作用域就比较大了,脱离了for循环
for ; step > 0; step-- {fmt.Println(step)
}

进一步简化代码,将 if 判断整合到 for 中,变为下面的代码:

step := 2
for step > 0 {step--fmt.Println(step)
}

结束循环的方法:break,return,goto,panic

其中,return和panic不会执行循环之后的语句,break会继续执行


3. for range

for range 结构是Go语言特有的一种的迭代结构,for range 可以遍历数组、切片、字符串、map 及管道(channel)

for key, val := range coll {...
}

val 始终为集合中对应索引的值拷贝,因此它一般只具有只读性质,对它所做的任何修改都不会影响到集合中原有的值

	str := "你好呀"for k, v := range str {fmt.Println(k, string(v))}

通过 for range 遍历的返回值有一定的规律:

  • 数组、切片、字符串返回索引和值。
  • map 返回键和值。
  • channel只返回管道内的值。

以下和c无太大区别

4. switch

go里面switch默认相当于每个case最后带有break,匹配成功后不会自动向下执行其他case,而是跳出整个switch, 那么如何做到执行完一个case之后,进入下一个case而不是跳出swtich呢?

答案是:fallthrough

var s = "hello"
switch {
case s == "hello":fmt.Println("hello")fallthrough
case s != "world":fmt.Println("world")
}


5. goto

goto 语句通过标签进行代码间的无条件跳转

使用 goto 退出多层循环

使用 goto 集中处理错误

6. break

break 语句可以结束 for、switch 和 select 的代码块,另外 break 语句还可以在语句后面添加标签,表示退出某个标签对应的代码块,标签要求必须定义在对应的 for、switch 和 select 的代码块上。


func main() {
OverLoop:for i := 0; i < 2; i++ {for j := 0; j < 5; j++ {switch j {case 2:fmt.Println(i, j)break OverLoopcase 3:fmt.Println(i, j)break OverLoop}}}
}
//0 2

7. continue

continue 语句可以结束当前循环,开始下一次的循环迭代过程,仅限在 for 循环内使用,在 continue 语句后添加标签时,表示开始标签对应的循环

package main
import "fmt"
func main() {
OuterLoop:for i := 0; i < 2; i++ {for j := 0; j < 5; j++ {switch j {case 2:fmt.Println(i, j)continue OuterLoop}}}
}

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

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

相关文章

qwen.cpp

1、Release模式 git clone --recursive https://github.com/QwenLM/qwen.cpp && cd qwen.cpp git submodule update --init --recursive python3 qwen_cpp/convert.py -i /mnt/workspace/qwen.cpp/Qianwen/qwen/Qwen-7B-Chat -t q4_0 -o qwen7b-ggml.bincmake -B buil…

什么是MAC地址? win10电脑查看MAC地址的多种方法

您是否知道连接到家庭网络的每件硬件都有自己的身份&#xff1f;正如每个设备都分配有自己的 IP 地址一样&#xff0c;每个硬件都有一个唯一的网络标识符。 该标识符称为MAC 地址。MAC 代表媒体访问控制。您可能需要 MAC 地址来解决网络问题或配置新设备。在 Windows 中查找您…

three.js 点乘判断平行向量方向异同

效果&#xff1a; 代码&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs"></div><div>判断的前提是两个向量平行<el-button click"judge"…

一文掌握大模型提示词技巧:从战略到战术

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

pytest 的 request fixture:实现个性化测试需求

在前文章中&#xff0c;我们看到pytest_repeat源码中有这样一段 pytest.fixture def __pytest_repeat_step_number(request):marker request.node.get_closest_marker("repeat")count marker and marker.args[0] or request.config.option.count......看到参数为r…

Stable Cascade又升级了,现在只需要两个模型

Stable Cascade这个模型&#xff0c;大家如果还有印象的话&#xff0c;是需要下载三个模型的&#xff0c;分别是Stage_a,Stage_b和Stage_c,如果全都下载下来&#xff0c;需要20多个G&#xff0c;但是最近使用ComfyUI做尝试的时候&#xff0c;发现官方的案例中已经没有用到单独的…

手撸AI-2: 设置脚本参数与设置随机种子

一.设置脚本参数 1. 代码示例 在完整的模型训练代码中,我们时常能看到通过python train.py --params 来训练模型,这也是在无UI界面的服务器上训练模型最主要的方法,因此使用脚本并设置脚本参数尤为重要. 我们通常会将脚本设置的代码写在config,py中,再用训练主函数main.py进行…

P4715 【深基16.例1】淘汰赛题解

题目 有&#xff08;n≤7&#xff09;个国家参加世界杯决赛圈且进入淘汰赛环节。已经知道各个国家的能力值&#xff0c;且都不相等。能力值高的国家和能力值低的国家踢比赛时高者获胜。1号国家和2号国家踢一场比赛&#xff0c;胜者晋级。3号国家和4号国家也踢一场&#xff0c;…

C++用临时对象构造新对象

C用临时对象构造新对象 //用临时对象构造同类型的新对象&#xff0c;该临时对象不产生&#xff1b; // 直接用生成临时对象的方法构造新对象&#xff0c;这是编译器对代码的优化&#xff0c;效率更高 #include<iostream> using namespace std; class MyClass { public:…

Golang 调度器 GPM模型

Golang 调度器 GPM模型 1 多进程/线程时代有了调度器需求 在多进程/多线程的操作系统中&#xff0c;就解决了阻塞的问题&#xff0c;因为一个进程阻塞cpu可以立刻切换到其他进程中去执行&#xff0c;而且调度cpu的算法可以保证在运行的进程都可以被分配到cpu的运行时间片。这…

chatgpt:还有哪些人工智能和科技值得关注?

今天&#xff0c;很多人的目光都被ChatGPT吸引&#xff0c;其实&#xff0c;人工智能的范围很大&#xff0c;远不止ChatGPT或者其他自然语言的处理工具。所以说不管ChatGPT的结果如何&#xff0c;人工智能依然是未来。 那么在ChatGPT之外&#xff0c;还有没有什么值得关注的人…

在网页上踢球:打造我自己的python(Django)足球网站

足球不仅仅是球场上的90分钟。它是一个不断发展的故事&#xff0c;一个全球球迷社群的粘合剂&#xff0c;一个数据和热情交织的世界。作为一名开发者和球迷&#xff0c;我决定将这两大爱好结合起来&#xff0c;用 Django 打造一个足球网站&#xff0c;让球迷们能够追踪他们最爱…

Unity AI生成全景图制作天空盒

现在的AI很强大。 其中&#xff0c;有这样一个网站&#xff0c;通过输入提示词&#xff0c;选择某种风格就可以为你生成360全景图。 网页链接 一、生成全景图 打开网页后&#xff0c;如图&#xff1a; 勾选&#xff0c;点击CONFIRM。 点击GET STARTED&#xff0c;进入主页。…

机器人定位——里程计Odom

根据两个车轮的轮速去估计当前的车的定位 我将提供一个更详细完整的模型来描述两轮差速机器人的里程计数。 我们假设机器人的两个轮子的半径分别为r1和r2&#xff0c;两个轮子的转速分别为ω1和ω2。机器人的轮距为L&#xff0c;指的是两个轮子中心之间的距离。 首先&#x…

Git LFS配置

当你需要克隆一个包含通过 Git Large File Storage (LFS) 管理的大文件的仓库时&#xff0c;确保 Git LFS 已经在你的系统上安装并正确配置是很重要的。这样&#xff0c;当你执行 git clone 命令时&#xff0c;Git LFS 跟踪的文件也会被正确地下载。以下是在 macOS 上进行配置和…

Stable Cascade-ComfyUI中文生图、图生图、多图融合基础工作流分享

最近 ComfyUI对于Stable Cascade的支持越来越好了一些&#xff0c;官方也放出来一些工作流供参考。 这里简单分享几个比较常用的基础工作流。 &#xff08;如果还没有下载模型&#xff0c;可以先阅读上一篇Stable Cascade升级&#xff0c;现在只需要两个模型&#xff09; &a…

python数据分析numpy基础之argmax求数组最大值索引

1 python数据分析numpy基础之argmax求数组最大值索引 python的numpy库的argmax()函数&#xff0c;用于获取沿指定轴的最大值的索引。 用法 numpy.argmax(a, axisNone, outNone, *, keepdims<no value>)描述 argmax()返回沿指定轴的最大值的索引。 入参axis表示指定轴…

Docker技术概论(5):Docker网络

Docker技术概论&#xff08;5&#xff09; Docker网络 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog…

基于QT和Visa的安捷伦(keysight)34970A温度采集

在以前的文章中&#xff0c;描述了如何在labview开发读取34970A仪器采集的温度。 也描述了如何安装keysight IO Libraries Suits. 那么本文更进一步&#xff0c;描述QT平台c语言开发软件&#xff0c;读取34970A仪器采集的温度。 以下是c代码&#xff0c;因为采集耗费时间长&…

C++虚函数调用规则

C虚函数调用规则 基类、派生类结构&#xff1a; class Foo { public:virtual void print() {cout << "Foo" << endl;} }; class Bar : public Foo { public:virtual void print() {cout << "Bar" << endl;} };1.通过对象直接调用…