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

Go语言入门之流程控制简述

Go语言入门之流程控制简述

1.if语句

if语句和其他语言一样,只不过go语言if不需要用括号包裹

if 语句的分支代码块的左大括号与 if 关键字在同一行上,这是 go 代码风格的统一要求

简单实例:

func main() {// 猜数字a := 2if a > 0 {if a > 3 {fmt.Println("数字过大")} else if a == 1 {fmt.Println("再大一点")} else if a == 2 {fmt.Println("再大一点")} else if a == 3 {fmt.Println("猜对了")}} else {fmt.Println("数字过小")}
}
// 输入的是2,输出的结果是:再大一点

if语句的特殊写法

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

// 特殊写法,这种写法将a的作用范围限制在if表达式中
if a := 10; a >5 {fmt.Println(a)return
}

2.for语句

go语言只支持for循环,没有while

(1)for语句的7种用法

第一种:普通写法
sum := 0
for i := 0; i < 10; i++ {sum += i
}
第二种:无限循环
for{// 无限循环代码块
}
第三种:for后只写条件
n := 0
// for后面只加条件 
for n < 3 {n++
}
fmt.Println(n)
第四种:for range 遍历切片
var slice []int = []int{1, 2, 3, 4, 5}
// for range循环切片或数组
for index, value := range slice {fmt.Printf("index:%d,value:%d \n", index, value)
}
第五种:for range 遍历字符串和整数
// 可以循环字符串 字符串底层为一个byte切片
// 字符串大小为16字节,其有一个指针和int型长度组成
for _, j := range "zhangsan" {fmt.Printf("%c \n", j)
}// for range还可以遍历整数
for i := range 5 {fmt.Printf("%d", i+1)
}
// 打印结果:12345
第六种:遍历map
// 循环map
mmap := map[int]string{11: "hh",22: "ff",33: "ww",
}
for key, value := range mmap {fmt.Println(key, value)
}
第七种:for range 遍历channel
// 循环channel
chnl := make(chan int)
go func() {chnl <- 100chnl <- 1000chnl <- 10000chnl <- 100000close(chnl)
}()
for i := range chnl {fmt.Println(i)
}

(2)for语句的4种结束方法

第一种:return
func main() {step := 2for step > 0 {step--fmt.Println(step)//执行一次就结束了return}//不会执行fmt.Println("结束之后的语句....")
}
第二种:break

注意:go语言中break只能跳出一层for循环

func main() {step := 2for step > 0 {step--fmt.Println(step)//跳出循环,还会继续执行循环外的语句break}//会执行fmt.Println("结束之后的语句....")
}
第三种:panic
func main() {step := 2for step > 0 {step--fmt.Println(step)//报错了,直接结束panic("出错了")}//不会执行fmt.Println("结束之后的语句....")
}
第四种:goto
func main() {for x := 0; x < 10; x++ {if x == 2 {// 跳转到标签goto breakHere}}// 手动返回, 避免执行进入标签return// 标签
breakHere:fmt.Println("done")
}

3.switch语句

Go语言的switch同其他语言的差不多,使用 switch 语句可方便地对大量的值进行条件判断。

switch 分支表达式可以是任意类型,不限于常量。可省略 break,默认自动终止

switch后如果没有表达式会对第一个true进行匹配

例子如下:

    // 成绩判定grade := "B"// 输入90var score int = 90switch score {case 90:grade = "A"case 80:grade = "B"case 50, 60, 70:grade = "C"// 无论 default出现在什么位置,它只会在所有case都没有匹配上的情况下才会被执行default:grade = "D"}fmt.Println(grade)//结果是:A

注意:

Go里面switch默认相当于每个case最后带有break

匹配成功后不会自动向下执行其他case,而是跳出整个switch

如果需要执行完一个case之后,进入下一个case不跳出swtich

这就需要用到fallthrough无论如何都会进入下个case

a := "hello"switch {case a == "hello":fmt.Print("hello ")fallthroughcase a == "world":fmt.Println("world")}
//打印结果:hello world

4.goto语句

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

goto 语句可以实现快速跳出循环、避免重复退出

因此 goto 语句能简化一些代码的实现过程

func main() {if 20 > 10 {goto GotoTag1}return
GotoTag1:fmt.Println("tag1")if 10 > 5 {goto GotoTag2}return
GotoTag2:fmt.Println("tag2")
}

5.break语句

break 语句可以结束 for、switch 和 select 的代码块

break 语句还可以在语句后面添加标签,表示退出某个标签对应的代码块

标签要求必须定义在对应的 forswitchselect 的代码块上。

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

6.continue语句

continue 语句可以结束当前循环,开始下一次的循环迭代过程

仅限在 for 循环内使用

在 continue 语句后添加标签时,表示开始标签对应的循环

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}}}
}

相关文章:

Go语言入门之流程控制简述

Go语言入门之流程控制简述 1.if语句 if语句和其他语言一样&#xff0c;只不过go语言的if不需要用括号包裹 if 语句的分支代码块的左大括号与 if 关键字在同一行上&#xff0c;这是 go 代码风格的统一要求 简单实例&#xff1a; func main() {// 猜数字a : 2if a > 0 {if a…...

接口测试框架基于模板自动生成测试用例!

引言 在接口自动化测试中&#xff0c;生成高质量、易维护的测试用例是一个重要挑战。基于模板自动生成测试用例&#xff0c;可以有效减少手工编写测试用例的工作量&#xff0c;提高测试的效率和准确性。 自动生成测试用例的原理 为了实现测试用例数据和测试用例代码的解耦&a…...

C++ STL stable_sort用法

一&#xff1a;功能 对区间内元素进行排序&#xff0c;保证相等元素的顺序&#xff08;稳定排序&#xff09; 二&#xff1a;用法 #include <iostream>struct Record {std::string label;int rank; };int main() {std::vector<Record> data {{"q", 1},…...

YOLO v8进行目标检测的遇到的bug小结

OSError: [WinError 1455] 页面文件太小&#xff0c;无法完成操作。 我的python环境是放在C盘的&#xff1a; 在“我的电脑”点击鼠标右键&#xff0c;打开“属性”点击高级系统设置点击“设置”找到“高级”点击“更改”分配“虚拟内存”&#xff08;这里需要重启电脑才能生…...

FastAPI -- 第二弹(响应模型、状态码、路由APIRouter、后台任务BackgroundTasks)

响应模型 添加响应模型 from typing import Anyfrom fastapi import FastAPI from pydantic import BaseModel, EmailStrapp FastAPI()class UserIn(BaseModel):username: strpassword: stremail: EmailStrfull_name: str | None Noneclass UserOut(BaseModel):username: s…...

案例 | 人大金仓助力山西政务服务核心业务系统实现全栈国产化升级改造

近日&#xff0c;人大金仓支撑山西涉企政策服务平台、政务服务热线联动平台、政务网、办件中心等近30个政务核心系统完成全栈国产化升级改造&#xff0c;推进全省通办、跨省通办、综合业务受理、智能审批、一件事一次办等业务的数字化办结进程&#xff0c;为我国数字政务服务提…...

如何用python写接口

如何用python写接口&#xff1f;具体步骤如下&#xff1a;  1、实例化server 2、装饰器下面的函数变为一个接口 3、启动服务 开发工具和流程&#xff1a; python库&#xff1a;flask 》实例化server&#xff1a;server flask.Flask(__name__) 》server.route(/index,met…...

轻量级可扩展易航网址引导系统源码V2.45

由于现在网站行业的不稳定&#xff0c;导致很地址频繁更换&#xff0c;不仅是网站&#xff0c;联系QQ&#xff0c;加群链接等需要更换时&#xff0c;好不容易发展的客户会因为找不到您新的网站地址而流失&#xff0c;有了引导页以后就可以安心地宣传无需担心客户丢失的问题。 …...

解决ESLint和Prettier冲突的问题

在配置了ESLint的项目中使用Prettier进行格式化可能会出现冲突&#xff0c;不如Prettier配置了使用双引号&#xff0c;ESLint配置了单引号&#xff0c;当然可以一个一个改成一样的配置&#xff0c;但是比较麻烦。我发现可以直接使用ESLint的规则进行格式化。在VSCode配置过程如…...

C判断一个点在三角形上

背景 鼠标操作时&#xff0c;经常要判断是否命中显示控件&#xff0c;特开发此算法快速判断。 原理 三角形三等分点定理是指在任意三角形ABC中&#xff0c;可以找到三个点D、E和F&#xff0c;使得线段AD、BE和CF均等分三角形ABC。 这意味着三个等分点分别位于三个边界上&…...

物业系统自主研发接口测试框架

1、自主研发框架整体设计 1.1、什么是测试框架? 在了解什么是自动化测试框架之前&#xff0c;先了解一下什么叫框架?框架是整个或部分系统的可重用设计&#xff0c;表现为一组抽象构件及构件实例间交互的方法;另一种定义认为&#xff0c;框架是可被应用开发者定制的应用骨架…...

手机和电脑通过TCP传输

一.工具 手机端&#xff1a;网络调试精灵 电脑端&#xff1a;野火网络调试助手 在开始通信之前&#xff0c;千万要查看一下电脑的防火墙是否关闭&#xff0c;否则可能会无法通信 在开始通信之前&#xff0c;千万要查看一下电脑的防火墙是否关闭&#xff0c;否则可能会无法通信…...

Git 在commit后,撤销commit

1. 撤销已经add&#xff0c;但是没有commit的问题 git reset HEAD 2. 撤销已经commit&#xff0c;但是没有push到远端的文件&#xff08;仅撤销commit 保留add操作&#xff09; 撤销上一次的提交 git reset --soft HEAD^windows 系统使用提示 more&#xff0c;需要多加一个…...

多模态大模型 - MM1

1. 摘要 本文主要通过分析模型结构和数据选择讨论如何构建一个好的多模态大模型&#xff08;MLLM&#xff09;&#xff0c;并同时提出了MM1模型&#xff0c;包括30B dense版本和64B的MoE版本。 具体贡献&#xff1a; 模型层面&#xff1a;影响效果的重要性排序为&#xff1a;…...

FPGA设计之跨时钟域(CDC)设计篇(2)----如何科学地设计复位信号?

1、复位是干嘛的? 时钟信号和复位信号应该是一个数字系统最重要和最常用的两个信号了。时钟的重要性大家都懂,没有时钟整个系统就无法同步,自然也就谈不上运行了。那么复位(reset)到底是干嘛的? 所有的数字系统在上电的时候都会进行复位,这样才能确保该系统的初始运行状…...

GPS北斗标准时钟同步服务器结构是什么?安徽京准

GPS北斗标准时钟同步服务器结构是什么&#xff1f;安徽京准 GPS北斗标准时钟同步服务器结构是什么&#xff1f;安徽京准 电厂时钟同步系统组成及配置 随着计算机和网络通信技术的飞速发展&#xff0c;火电厂热工自动化系统数字化、网络化的时代已经到来。一方面它为控制和信息系…...

9.5 栅格图层符号化多波段彩色渲染

文章目录 前言多波段彩色渲染QGis设置为多波段彩色二次开发代码实现多波段彩色 总结 前言 介绍栅格图层数据渲染之多波段彩色渲染说明&#xff1a;文章中的示例代码均来自开源项目qgis_cpp_api_apps 多波段彩色渲染 以“3420C_2010_327_RGB_LATLNG.tif”数据为例&#xff0c…...

力扣第九题

回文数 提示&#xff1a; 给你一个整数 x &#xff0c;如果 x 是一个回文整数&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 回文数是指正序&#xff08;从左向右&#xff09;和倒序&#xff08;从右向左&#xff09;读都是一样的整数。 代码展示&#…...

鞭炮插画:成都亚恒丰创教育科技有限公司

鞭炮插画&#xff1a;年味里的绚烂记忆 在岁末年初的温柔时光里&#xff0c;总有一抹色彩&#xff0c;能瞬间唤醒沉睡的年味——那便是鞭炮插画中跃动的红与金&#xff0c;成都亚恒丰创教育科技有限公司 它们不仅仅是纸与墨的交织&#xff0c;更是情感与记忆的桥梁&#xff0c…...

python 循环

循环 while语句 for语句 循环控制语句 break 立即退出循环。 continue 跳过当前循环的剩余部分&#xff0c;并开始下一次迭代。 else for 和 while 循环都可以有一个可选的 else 子句&#xff0c;当循环正常结束时执行。 嵌套 占位符pass pass 是一个空操作语句。当你需要在代…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

搭建DNS域名解析服务器(正向解析资源文件)

正向解析资源文件 1&#xff09;准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2&#xff09;服务端安装软件&#xff1a;bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散

前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说&#xff0c;在叠衣服的过程中&#xff0c;我会带着团队对比各种模型、方法、策略&#xff0c;毕竟针对各个场景始终寻找更优的解决方案&#xff0c;是我个人和我司「七月在线」的职责之一 且个人认为&#xff0c…...

VisualXML全新升级 | 新增数据库编辑功能

VisualXML是一个功能强大的网络总线设计工具&#xff0c;专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑&#xff08;如DBC、LDF、ARXML、HEX等&#xff09;&#xff0c;并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...

20250609在荣品的PRO-RK3566开发板的Android13下解决串口可以执行命令但是脚本执行命令异常的问题

20250609在荣品的PRO-RK3566开发板的Android13下解决串口可以执行命令但是脚本执行命令异常的问题 2025/6/9 20:54 缘起&#xff0c;为了跨网段推流&#xff0c;千辛万苦配置好了网络参数。 但是命令iptables -t filter -F tetherctrl_FORWARD可以在调试串口/DEBUG口正确执行。…...

学习 Hooks【Plan - June - Week 2】

一、React API React 提供了丰富的核心 API&#xff0c;用于创建组件、管理状态、处理副作用、优化性能等。本文档总结 React 常用的 API 方法和组件。 1. React 核心 API React.createElement(type, props, …children) 用于创建 React 元素&#xff0c;JSX 会被编译成该函数…...