03-踏入程序诗意:Golang 流程控制的优雅律动

news2025/2/10 7:44:41

在这里插入图片描述

📃个人主页:个人主页
🔥系列专栏:Golang基础
💬Go(又称Golang)是由Google开发的开源编程语言。它结合了静态类型的安全性和动态语言的灵活性,拥有高效的并发编程能力和简洁的语法。Go被设计用于构建可扩展、高性能的软件系统,具有优秀的内存管理和快速的编译速度,适用于Web开发、系统编程和云计算等领域。

文章目录

  • if
  • goto
  • for
  • switch

Go中流程控制分三大类: 条件判断循环控制无条件跳转

if

if 是各种编程语言中最常见的了,它的语法概括起来就是:如果满足条件就做某事,否则做另一件事
Go里面 if 条件判断语句中不需要括号,如下代码所示:

if x > 10 {
	fmt.Println("x > 10")
} else {
	fmt.Println("x <= 10")
}

Go的 if 还有一个强大的地方就是条件判断语句里面允许声明一个变量,这个变量的作用域只能在该条件逻辑块内,其他地方就不起作用了,如下所示:

// 计算获取值x,然后根据x返回的大小,判断是否大于10。
if x := f(); x > 10 {
	fmt.Println("x > 10")
} else {
	fmt.Println("x <= 10")
}
//这个地方如果这样调用就编译出错了,因为x是条件里面的变量
fmt.Println(x)

多个条件的时候如下所示:

if x == 3 {
	fmt.Println("x == 3")
} else if x < 3 {
	fmt.Println("x < 3")
} else {
	fmt.Println("x > 3")
}

goto

Go有 goto 语句,请明智地使用它。
goto 跳转到必须在当前函数内定义的标签。
例如假设这样一个循环:

func f() {
	i := 0
Here: //这行的第一个词,以冒号结束作为标签
	println(i)
	i++
	goto Here //跳转到Here去
}

for

Go 里面最强大的一个控制逻辑就是 for ,它既可以用来循环读取数据,又可以当作 while 来控制逻辑,还能迭代操作。
它的语法如下:

for expression1; expression2; expression3 {
//...
}

expression1expression2expression3 都是表达式,其中 expression1expression3 是变
量声明或者函数调用返回值之类的, expression2 是用来条件判断, expression1 在循环开始之前调
用, expression3 在每轮循环结束之时调用。
个例子比上面讲那么多更有用,看看下面的例子吧:

package main
import "fmt"
func main(){
	sum := 0;
	for index:=0; index < 10 ; index++ {
	sum += index
}
	fmt.Println("sum = ", sum)
}
// 输出:sum = 45

有些时候需要进行多个赋值操作,由于 Go 里面没有 , 操作符,那么可以使用平行赋值 i, j = i+1, j-1
有些时候如果忽略 expression1expression3

sum := 1
for ; sum < 1000 ; {
	sum += sum
}

其中 ; 也可以省略,那么就变成如下的代码了,这就是 while 的功能。

sum := 1
for sum < 1000 {
	sum += sum
}

在循环里面有两个关键操作 breakcontinue , break 操作是跳出当前循环, continue 是跳过本次循环。
当嵌套过深的时候, break 可以配合标签使用,即跳转至标签所指定的位置,详细参考如下例子:

for index := 10; index>0; index-- {
	if index == 5{
		break // 或者continue
	}
	fmt.Println(index)
}
// break打印出来10、9、8、7、6
// continue打印出来10、9、8、7、6、4、3、2、1

breakcontinue 还可以跟着标号,用来跳到多重循环中的外层循环
for 配合 range 可以用于读取 slicemap 的数据:

for k,v:=range map {
	fmt.Println("map key:",k)
	fmt.Println("map val:",v)
}

由于 Go 支持 多值返回,而对于声明而未被调用的变量, 编译器会报错, 在这种情况下, 可以使用 _ 来丢弃不需要的返回值
例如:

for _, v := range map{
	fmt.Println("map val:", v)
}

switch

有些时候需要写很多的 if-else 来实现一些逻辑处理,这个时候代码看上去就很丑很冗长,而且也不易于以后的维护,这个时候 switch 就能很好的解决这个问题。它的语法如下

switch sExpr {
case expr1:
	some instructions
case expr2:
	some other instructions
case expr3:
	some other instructions
default:
	other code
}

sExprexpr1expr2expr3 的类型必须一致。
Go的 switch 非常灵活,表达式不必是常量或整数,执行的过程从上至下,直到找到匹配项;而如果 switch 没有表达式,它会匹配 true

i := 10
switch i {
case 1:
	fmt.Println("i = 1")
case 2, 3, 4:
	fmt.Println("i = 2, 3, 4")
case 10:
	fmt.Println("i = 10")
default:
	fmt.Println("exit")
}

在第5行中,把很多值聚合在了一个 case 里面,同时,Go里面 switch 默认相当于每个 case 最后带有
break ,匹配成功后不会自动向下执行其他 case ,而是跳出整个 switch , 但是可以使用 fallthrough
强制执行后面的 case 代码。

x := 6
switch x{
case 4:
	fmt.Println("x <= 4")
	fallthrough
case 5:
	fmt.Println("x <= 5")
	fallthrough
case 6:
	fmt.Println("x <= 6")
	fallthrough
case 7:
	fmt.Println("x <= 7")
	fallthrough
case 8:
	fmt.Println("x <= 8")
	fallthrough
default:
	fmt.Println("exit")
}

上面的程序将输出

x  <= 6
x <= 7
x <= 8
exit

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

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

相关文章

Linux 安装Docker完整教程(六)

文章目录 背景一、Docker简介二、docker desktop 和 docker engin 区别三、Linux 安装Docker1. 安装docker的前置条件&#xff1a;2. 查看Docker版本3. 检查是否安装过Docker4. Docker的自动化安装 (不想自带化安装的可跳过本步骤&#xff0c;选择手动安装)5. Docker手动安装&a…

第二章CompletableFuture

文章目录 Future和Callable接口FutureTask实现类为什么引出FutureTask Future到CompletableFutureFuture优点Future的缺点get()阻塞isDone()轮询Future应用现状 CompletableFuture基本介绍CompletionStage核心的四个静态方法&#xff08;分为两组&#xff09;runAsync无返回值s…

数字人解决方案——实时对话数字人源码与环境配置

前言 1.从技术角度来看&#xff0c;现在的数学人就是一个缝合怪&#xff0c;把各种技术点都整合在一起&#xff0c;用来实现直播、对话等数字人。技术流程大概如下图&#xff1a; 其实最重要的一环应该属于LLM(大型语言模型)&#xff0c;LLM相当于一个人的意识&#xff0c;如果…

外卖订单管理系统(Javaweb+Mysql)

程序源码 可以通过上方代码包.rar文件下载&#xff0c;也可以在下方链接下载 链接: https://pan.baidu.com/s/1OruBEcEK70DtUbvA8UIE-w?pwddkdg &#xff08;数据库sql文件在项目根目录下data -> sql&#xff09; 设计报告 【金山文档】 外卖订单管理系统设计报告 http…

编译原理期末速成–正规式、NFA转DFA、DFA的简化

编译原理期末速成–正规式、NFA转DFA、DFA的简化 文章目录 编译原理期末速成--正规式、NFA转DFA、DFA的简化什么是DFA、NFA&#xff1f;看个题消化一下步骤一&#xff1a;步骤二&#xff1a;步骤三&#xff1a;步骤四&#xff1a;步骤五&#xff1a;步骤六&#xff1a;步骤七&a…

POJ The Game

原题目&#xff1a;传送锚点 1.题目 The Game Description A game of Renju is played on a 19*19 board by two players. One player uses black stones and the other uses white stones. The game begins in an empty board and two players alternate in placing black …

面对工作中的失误:从错误中学习与成长

&#x1f604;作者简介&#xff1a; 小曾同学.com,一个致力于测试开发的博主⛽️&#xff0c;主要职责&#xff1a;测试开发、CI/CD 如果文章知识点有错误的地方&#xff0c;还请大家指正&#xff0c;让我们一起学习&#xff0c;一起进步。&#x1f60a; 座右铭&#xff1a;不想…

C99的一些新特性记录

固长类型头文件<stdint.h> 由于历史原因&#xff0c;C语言中实现的整型数只保证了在不同硬件体系中的最小长度&#xff0c;因此在使用时&#xff0c;需要根据代码实际运行的平台来确定类型的长度&#xff0c;这导致代码非常不方便移植。C99标准通过增加固长类型头文件引入…

【Unity3D】屏幕深度和法线纹理简介

1 前言 1&#xff09;深度纹理和法线纹理的含义 深度纹理本质是一张图片&#xff0c;图片中每个像素反应了屏幕中该像素位置对应的顶点 z 值相反数&#xff08;观察坐标系&#xff09;&#xff0c;之所以用 “反应了” 而不是 “等于”&#xff08;或 “对应” &#xff09;&am…

chatgpt赋能python:Python浮点型转换为整型的方法和应用场景

Python浮点型转换为整型的方法和应用场景 介绍 Python的浮点型和整型在数值计算中应用广泛。有时候我们需要将一个浮点数转换为整数&#xff0c;这时候就需要使用Python提供的一些函数来完成转换。本文将介绍Python浮点型转换为整型的方法和应用场景。 浮点型和整型的区别 …

初探MyBatis实现简单查询

一、创建数据库与表 1、创建数据库 在Navicat里创建MySQL数据库 - testdb&#xff0c;采用utf8mb4字符集 2、创建用户表 CREATE TABLE t_user (id int(11) NOT NULL AUTO_INCREMENT,name varchar(50) DEFAULT NULL,age int(11) DEFAULT NULL,address varchar(255) DEFAULT…

SpringBoot的日志文件

文章目录 前言日志怎么用自定义打印日志⽇志级别 - 了解⽇志持久化Lombok提供的方法 前言 上文讲述了 SpringBoot项目的构建 与配置文件的使用 ,下面来介绍 SpringBoot 的日志文件 , 日志在程序 中起到的作用是很大的 , 谁写的程序能不报错误呢, 日志就是一种让你快速找到错误…

Linux环境变量配合权限维持手法

前言&#xff1a; 权限维持的时候有其中有两种&#xff0c;一种是alias别名、第二种是prompt_command&#xff0c;这里我们可以将其添加到环境变量中&#xff0c;每次运行的时候都可以使用&#xff0c;从而达到权限控制的效果&#xff0c;而不是临时执行的效果。 环境变量&am…

harbor仓库的搭建

harbor仓库的搭建 前言一、准备二、registry私有仓库拉取registry镜像上传镜像下载镜像添加私有仓库解析配置使用非加密端口拉取镜像 三、仓库加密域名保持一致部署客户端证书&#xff0c;不然会报错验证仓库认证删除registry&#xff0c;重建登录仓库&#xff0c;不然无法上传…

[论文阅读笔记76]GPT Understands, Too(P-tuning)

1. 基本信息 题目论文作者与单位来源年份GPT Understands, Too清华大学 Citations, References 论文链接&#xff1a;https://arxiv.org/pdf/2103.10385.pdf 论文代码&#xff1a; 2. 要点 研究主题问题背景核心方法流程亮点数据集结论论文类型关键字微调大模型采用传统微…

css空间转换

目录 1. 3D移动 translate3d 1.1 三维坐标系 1.2 3D移动 translate3d 1.3 透视 perspective 1.4 translateZ 2. 3D旋转 rotate3d 2.1 左手法则-判断元素旋转方向的取值正负 3. 3D呈现 transform-style【***】 4. 3D缩放 transform:scale3d 1. 3D移动 translate3d …

nacos运行报错-jar: file does not existCan‘t retrieve image ID from build stream

一、问题 Deploying nacos Dockerfile: ruoyi-visual/ruoyi-nacos/Dockerfile… Building image… Preparing build context archive… [>]211/211 files DoneSending build context to Docker daemon… [>] 6.099MB DoneStep 1/8 : FROM openjdk:11---> 5505a9a39df…

chatgpt赋能python:用Python创建股票池

用Python创建股票池 介绍 如果你是一位投资者&#xff0c;你一定知道股票池是什么。它是一个包含一组股票的集合&#xff0c;使投资者能够跟踪和管理他们的投资组合。这些股票可以根据各种因素分类&#xff0c;例如行业&#xff0c;市值&#xff0c;收入增长等。 Python是一…

Oracle的学习心得和知识总结(二十六)|Oracle数据库Real Application Testing测试指南(数据库回放)

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《Oracle Database SQL Language Reference》 2、参考书籍&#xff1a;《PostgreSQL中文手册》 3、EDB Postgres Advanced Server User Gui…

学习HCIP的day.13

目录 IPV6 一、特征-升级点 二、IPV6地址 三、IPV6地址分类 1、单播地址 2、多播地址 四、协议 五、思科配置 1、接口配置IPV6的单播地址 2、IPV6的ACL 3、IPV6的单播路由协议 4、IPV4和IPV6共存 六、华为IPV6配置 1、静态 2、OSPF 3、BGP 4、IPV4和IPV6共存…