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

Go语言精修(尚硅谷笔记)第五章

五、程序流程控制

5.1 单分支控制

package main
import ("fmt" 
)func main() {//请大家看个案例[ifDemo.go]://编写一个程序,可以输入人的年龄,如果该同志的年龄大于18岁,则输出 "你年龄大//于18,要对自己的行为负责!"//分析 //1.年龄 ==> var age int //2.从控制台接收一个输入 fmt.Scanln(&age)//3.if判断var age intfmt.Println("请输入年龄:")fmt.Scanln(&age)if age > 18 {fmt.Println("你年龄大于18,要对自己的行为负责!")}//golang支持在if中,直接定义一个变量,比如下面if age := 20; age > 18 {fmt.Println("你年龄大于18,要对自己的行为负责!")}	
}

5.2 双分支控制

if 条件表达式{执行代码块1
}else{执行代码块2
}
package main
import ("fmt" 
)func main() {var x int = 4if x > 2fmt.Println("ok")elsefmt.Println("hello")//编译错误,if没有{}
}
package main
import ("fmt" 
)func main() {var x int = 4if x > 2{fmt.Println("ok")}    else{fmt.Println("hello")}//编译错误,else不能换行
}

5.3 多分支控制

if 条件表达式1{执行代码块1
}else if 条件表达式2{执行代码块2
}
......
else{执行代码块n
}

5.4 switch分支控制

1 ) switch 语句用于基于不同条件执行不同动作,每一个 case 分支都是唯一的,从上到下逐一测 试,直到匹配为止。

2 ) 匹配项后面也不需要再加 break

switch 表达式{case 表达式1,表达式2..:语句块1fallthrough//穿透 如果有这个则会继续执行下面的casecase 表达式3,表达式4..:语句块2...default://没有任何case匹配 折执行default 不是必须的语句块
}

使用细节

1 ) case/switch后是一个表达式( 即:常量值、变量、一个有返回值的函数等都可以)

2 ) case后的各个表达式的值的数据类型,必须和 switch 的表达式数据类型一致

package main
import ("fmt" 
)func main() {var n1 int32 = 20var n2 int64 = 20switch n1 { //错误,原因是n2和n1数据类型不一致      case n2:fmt.Println("ok1")default:fmt.Println("没有匹配到...")}
}

3 ) case后面可以带多个表达式,使用逗号间隔。比如 case 表达式 1 , 表达式 2 …

package main
import ("fmt" 
)func main() {var n1 int32 = 51var n2 int32 = 20switch n1 {case n2, 10, 5 :  // case 后面可以有多个表达式fmt.Println("ok1")case 90 : fmt.Println("ok2~")}
}

4 ) case后面的表达式如果是常量值(字面量),则要求不能重复

package main
import ("fmt" 
)func main() {var n1 int32 = 51var n2 int32 = 20switch n1 {case n2, 10, 5 :  // case 后面可以有多个表达式fmt.Println("ok1")case 5 : //错误,前面已经有常量5了,不能重复fmt.Println("ok2~")default:fmt.Println("没有匹配到...")}
}

5.) case后面不需要带break, 程序匹配到一个case后就会执行对应的代码块,然后退出switch,如果一个都匹配不到,则执行 default

6 ) default 语句不是必须的.

7 ) switch 后也可以不带表达式,类似 if–else分支来使用。【案例演示】

package main
import ("fmt" 
)func main() {//switch 后也可以不带表达式,类似 if --else分支来使用。【案例演示】var age int = 10switch {case age == 10 :fmt.Println("age == 10")case age == 20 :fmt.Println("age == 20")default :fmt.Println("没有匹配到")}//case 中也可以对 范围进行判断var score int = 90switch {case score > 90 :fmt.Println("成绩优秀..")case score >=70 && score <= 90 :fmt.Println("成绩优良...")case score >= 60 && score < 70 :fmt.Println("成绩及格...")default :fmt.Println("不及格")}
}

8 ) switch 后也可以直接声明/定义一个变量,分号结束,不推荐。 【案例演示】

package main
import ("fmt" 
)func main() {//switch 后也可以直接声明/定义一个变量,分号结束,不推荐	switch grade := 90; { // 在golang中,可以这样写case grade > 90 :fmt.Println("成绩优秀~..")case grade >=70 && grade <= 90 :fmt.Println("成绩优良~...")case grade >= 60 && grade < 70 :fmt.Println("成绩及格~...")default :fmt.Println("不及格~")}
}

9 ) switch 穿透-fallthrough ,如果在case语句块后增加fallthrough,则会继续执行下一个case,也 叫switch穿透

package main
import ("fmt" 
)func main() {//switch 的穿透 fallthroughtvar num int = 10switch num {case 10:fmt.Println("ok1")fallthrough //默认只能穿透一层case 20:fmt.Println("ok2")fallthroughcase 30:fmt.Println("ok3")	default:fmt.Println("没有匹配到..")}
}

10 ) TypeSwitch:switch 语句还可以被用于 type-switch 来判断某个 interface 变量中实际指向的变量类型

package main
import ("fmt" 
)func main() {var x interface{}var y = 10.0x = yswitch x := x.(type) {case nil:fmt.Println("x 的类型:%T",i)case int:fmt.Println("x 是int型")case float64:fmt.Println("x 是float型")	case func(int) float:fmt.Println("x 是func(int) float")	 		case bool, string:fmt.Println("x 是bool 或 string型")     		default:fmt.Println("未知型..")}
}

5.5 for循环

1)基本语法

for 循环变量初始化; 循环条件; 循环变量迭代 {循环操作(语句)
}

2)for循环的第二种使用方式

for 循环判断条件 {//循环执行语句
}

将变量初始化和变量迭代写到其它位置

案例演示:

package main
import ("fmt"
)
func main(){//for循环的第二种写法j := 1 //循环变量初始化for j <= 10 { //循环条件fmt.Println("你好,Golang Roadmap~", j)j++ //循环变量迭代}
}

3 ) for循环的第三种使用方式

for {
//循环执行语句
}

上面的写法等价 for;;{} 是一个无限循环, 通常需要配合 break 语句使用

package main
import ("fmt"
)
func main(){//for循环的第三种写法, 这种写法通常会配合break使用k := 1for {  // 这里也等价 for ; ; { if k <= 10 {fmt.Println("你好,Golang Roadmap~", k)} else {break //break就是跳出这个for循环}k++}
}

4 ) Golang 提供 for-range的方式,可以方便遍历字符串和数组(注: 数组的遍历,我们放到讲数组 的时候再讲解) ,案例说明如何遍历字符串。 字符串遍历方式 1 - 传统方式

package main
import ("fmt"
)
func main(){//字符串遍历方式1-传统方式var str string = "hello,world!北京"for i := 0; i < len(str); i++ {fmt.Printf("%c \n", str[i]) //使用到下标...}
}

字符串遍历方式 2 - for-range

package main
import ("fmt"
)
func main(){//字符串遍历方式2-for-rangestr = "abc~ok上海"for index, val := range str {fmt.Printf("index=%d, val=%c \n", index, val)}
}

如果我们的字符串含有中文,那么传统的遍历字符串方式,就是错误,会出现乱码。原因是传统的对字符串的遍历是按照字节来遍历,而一个汉字在utf 8 编码是对应 3 个字节。

如何解决 需要要将 str 转成 []rune切片

package main
import ("fmt"
)
func main(){//字符串遍历方式1-传统方式var str string = "hello,world!北京"str2 := []rune(str) // 就是把 str 转成 []runefor i := 0; i < len(str2); i++ {fmt.Printf("%c \n", str2[i]) //使用到下标...}
}

对应for-range遍历方式而言,是按照字符方式遍历。因此如果有字符串有中文,也是ok

5.6 WHILE和DO…WHILE的实现

Go语言没有while和do…while语法,这一点需要同学们注意一下,如果我们需要使用类似其它语言(比如 java/c 的 while 和 do…while),可以通过 for 循环来实现其使用效果。

while循环的实现

循环变量初始化
for{if循环条件表达式{break//跳出for循环}循环操作语句循环变量迭代
}

说明上图

1 ) for循环是一个无限循环

2 ) break 语句就是跳出for循环

使用上面的while实现完成输出 10 句”hello,wrold”

package main
import "fmt"func main(){//使用while方式输出10句 "hello,world"//循环变量初始化var i int = 1for {if i > 10 { //循环条件break // 跳出for循环,结束for循环}fmt.Println("hello,world", i)i++ //循环变量的迭代}fmt.Println("i=", i)
}

do…while的实现

循环变量初始化
for{循环操作语句循环变量迭代if循环条件表达式{break//跳出for循环}
}

对上图的说明

1 ) 上面的循环是先执行,在判断,因此至少执行一次。

2 ) 当循环条件成立后,就会执行break,break就是跳出for循环,结束循环.

相关文章:

Go语言精修(尚硅谷笔记)第五章

五、程序流程控制 5.1 单分支控制 package main import ("fmt" )func main() {//请大家看个案例[ifDemo.go]://编写一个程序,可以输入人的年龄,如果该同志的年龄大于18岁,则输出 "你年龄大//于18,要对自己的行为负责!"//分析 //1.年龄 > var age int…...

三、MySQL 高级(DML 增删改)

三、MySQL 高级&#xff08;DML 增删改&#xff09; 3.1 DML 数据操纵语言 DML&#xff08;Data Manipulation Language&#xff09;DML对数据库中表记录的执行操作 插入&#xff08;INSERT&#xff09; 插入单行数据 插入多行数据 将查询结果插入到新表 更新&#xff08…...

面向AI编程的本质是什么?

面向AI编程的本质是什么&#xff1f; 面向AI编程的本质是编程的第五代编程语言&#xff0c;与自然语言非常相似&#xff0c;但是是有区别的。 因此出现了针对与AI通话的提示工程。 简单地回顾一下编程语言的发展史&#xff0c; 第一代编程语言是机器语言&#xff0c;它直接使…...

深入浅出——深度学习训练中的warmup

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️&#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…...

你知道如何用C语言将格式化数据和字符串相互转换吗?

今天重点介绍2个函数&#xff0c;分别是sprintf和sscanf&#xff0c;用来将格式化数据和字符串相互转换。它们的作用分别是&#xff1a; sprintf函数用于将格式化数据转换成字符串。sscanf函数用于将字符串转换成格式化数据。 接下来是第一个大问题&#xff1a;我怎么记忆呢&…...

免费一键生成原创文章-原创文章批量生成

免费使用一键生成原创文章&#xff0c;轻松解决写作难题&#xff01; 您是否因为写作枯竭、文章档次不高&#xff0c;而感到烦恼&#xff1f;现在&#xff0c;我们有一个免费的文章创作工具&#xff0c;帮助您无需付出太多的努力就能高效地创造原创文章。 一键生成&#xff1…...

【数据库管理】④重做日志Redo Log

1. Redo log(重做日志)的功能 重做日志&#xff08;Redo log&#xff09;是数据库管理系统中的一种机制&#xff0c;主要作用包括&#xff1a; 提供事务的持久性支持&#xff1a;重做日志记录了每个事务对数据库所做的修改操作&#xff0c;以便在系统故障或崩溃时&#xff0c;通…...

5-python文件操作

文章目录1.打开文件2.文件读取3.文件关闭4.文件写入/追加1.打开文件 当传参顺序不一致时&#xff0c;不能使用位置传参&#xff0c;应使用关键字传参 open(file, mode‘r’, buffering-1, encodingNone, errorsNone, newlineNone, closefdTrue, openerNone) 通常使用&#xf…...

企业级Oracle入门Linux/Unix基础①

1、了解计算机系统的组成、操作系统介绍、IT技术发展与云计算、服务器的分类、存储设备介绍、常用的主机存储有哪些&#xff1f; 1.1 计算机系统的组成&#xff1a; 计算机系统由硬件和软件两部分组成。硬件包括中央处理器&#xff08;CPU&#xff09;、内存、输入输出设备、…...

NexNoSQL Client:Elasticsearch、Redis、MongoDB三合一的可视化客户端管理工具

背景&#xff1a; 工作中我们使用了Elasticsearch作为存储&#xff0c;来支持内容的搜索&#xff0c;Elasticsearch这个软件大家都耳熟能详&#xff0c;它是一个分布式、高扩展、高实时的搜索与数据分析引擎&#xff0c;不仅仅支持文本索引&#xff0c;还支持聚合操作&#xf…...

如果大学能重来,我绝对能吊打90%的大学生,早知道这方法就好了

最近收到很多大学生粉丝的私信&#xff0c;大多数粉丝们都迷茫着大学计算机该怎么学&#xff0c;毕业后才能找到好工作。 可能是最近回答这方面的问题有点多&#xff0c;昨晚还真梦回大学…其实工作了20多年&#xff0c;当过高管&#xff0c;创过业&#xff0c;就差没写书了。…...

FactoryBean是现在的执行时机

调用getBean方法&#xff0c;最终到org.springframework.beans.factory.support.DefaultListableBeanFactory#preInstantiateSingletons方法&#xff1a; for (String beanName : beanNames) {RootBeanDefinition bd getMergedLocalBeanDefinition(beanName);if (!bd.isAbstr…...

自定义注解使用

现象&#xff1a; 自定义注解使用 方法&#xff1a; 1&#xff1a;元注解 java.lang.annotation 下定义了元注解 Documented 文档相关 标注了此注解则会包含在javadoc文档中Retention 指定注解生命周期Target 指定注解作用范围Inherited 指定子类可以继承父类的注解Native …...

2023年全国最新高校辅导员精选真题及答案42

百分百题库提供高校辅导员考试试题、辅导员考试预测题、高校辅导员考试真题、辅导员证考试题库等&#xff0c;提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助你考试轻松过关。 89.侵犯行为是一种故意伤害他人的行为&#xff0c;一般包括了动机、行为和后果。 答案&a…...

Python模拟星空

文章目录前言Turtle基础1.1 Turtle画板1.2 Turtle画笔1.3 Turtle画图1.4 Turtle填色1.5 Turtle写字模拟星空模拟星球浪漫星空尾声前言 Python模拟星空&#xff0c;你值得拥有&#xff01;uu们一周不见啦&#xff0c;本周博主参考网上大佬们的星空&#xff0c;给大家带来了属于…...

IDE集成开发工具-IDEA(一)之IDE的概念

IDE的概念 集成开发环境&#xff08;IDE&#xff0c;Integrated Development Environment &#xff09;是用于提供程序开发环境的应用程序&#xff0c;一般包括代码编辑器、编译器、调试器和图形用户界面等工具。集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开…...

基于Java+Springboot+vue的汽车租赁系统设计与实现【源码(完整源码请私聊)+论文+演示视频+包运行成功】

博主介绍&#xff1a;专注于Java技术领域和毕业项目实战 &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb; 不然下次找不到哟 Java项目精品实战案例&#xff08;200套&#xff09; 目录 一、效果演示 二、…...

【笔记】关于Maven中<optional>标签的理解

之前我有个误区&#xff1a;子pom通过<parent>标签继承父pom&#xff0c;如果父pom中的依赖设置<optional>true</optional> <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version&g…...

JavaScript函数及面向对象

JavaScript函数及面向对象 4.1、函数定义及变量作用域 定义方式一 绝对值函数 function abs(x){if(x>0){return x;}else{return -x;} }一旦执行到return代表函数结束&#xff0c;返回结果&#xff01; 如果没有执行return&#xff0c;函数执行完也会返回结果&#xff0c;…...

【chartGPT】我们要不要搞chartGPT?

话题:官兔子并未表态要研发chartGPT&#xff0c;chartGPT炒的很火&#xff0c;我们到底要不要投入研发呢&#xff1f; 问题起因:我个人是做技术的&#xff0c;也玩炒股。就昨天吧&#xff0c;看到一个热评【马斯克等呼吁暂停chartGPT5的研发&#xff0c;周鸿炜谈不发展才是最大…...

串口通信粘包问题:成因深度解析与项目实战解决方案

在嵌入式开发、工业工控、上位机下位机交互项目中&#xff0c;串口&#xff08;RS232/RS485&#xff09;是最基础、最常用的通信方式。绝大多数开发者都遇到过这样的问题&#xff1a;串口接收的数据偶尔错乱、解析报错、数据拼接异常&#xff0c;单次接收的数据时而半包、时而多…...

从入门到实践:EEG公开数据集分类与应用场景全解析

1. EEG公开数据集入门指南刚接触脑电信号分析的研究者&#xff0c;常常会被一个问题困扰&#xff1a;"我应该从哪里获取可靠的EEG数据&#xff1f;"作为一个在这个领域摸爬滚打多年的研究者&#xff0c;我完全理解这种困惑。记得我第一次接触EEG研究时&#xff0c;光…...

MAX78000移植Zephyr RTOS实战:从BSP创建到AI边缘设备开发

1. 项目概述与动机作为一名长期在嵌入式边缘AI和机器人领域摸爬滚打的开发者&#xff0c;我最近把目光投向了一块相当有潜力的板子&#xff1a;Maxim Integrated&#xff08;现为ADI一部分&#xff09;的MAX78000FTHR开发套件。这块板子的核心——MAX78000微控制器&#xff0c;…...

从BUG()到panic:深入Linux 5.4内核,看异常处理如何层层递进

从BUG()到panic&#xff1a;Linux内核异常处理的防御体系全解析当你在深夜调试一个内核模块时&#xff0c;突然屏幕刷出一串红色警告——这可能是每个Linux内核开发者都经历过的噩梦时刻。但你是否想过&#xff0c;从第一行警告出现到系统完全崩溃&#xff0c;内核究竟经历了怎…...

写论文的神助攻!好用的AI写作辅助软件,逻辑清晰质量高

作为一名刚完成毕业论文的过来人&#xff0c;我太懂写论文的痛苦了 —— 选题迷茫、文献浩如烟海、框架混乱、逻辑不清、反复修改、查重降重反复折腾... 直到我发现了这套 AI 写作工具组合&#xff0c;简直是论文写作的 "开挂神器"&#xff0c;效率直接拉满&#xff…...

Spring Security OAuth2 /oauth/token 401原因与Content-Type规范

1. 问题现场还原&#xff1a;一个看似简单却让开发停摆两小时的/oauth/token请求刚接手一个老项目做安全加固&#xff0c;第一件事就是验证OAuth2密码模式的token获取流程。我照着文档写了一条curl命令&#xff1a;curl -X POST http://localhost:8080/oauth/token回车执行&…...

终极歌词同步神器LRCGET:5分钟为你的音乐库添加完美歌词

终极歌词同步神器LRCGET&#xff1a;5分钟为你的音乐库添加完美歌词 【免费下载链接】lrcget Utility for mass-downloading LRC synced lyrics for your offline music library. 项目地址: https://gitcode.com/gh_mirrors/lr/lrcget 你是否厌倦了在听歌时手动搜索歌词…...

约束感知图缩减算法在量子优化中的应用

1. 约束感知图缩减算法概述在量子计算领域&#xff0c;资源受限一直是制约算法实际应用的主要瓶颈。以当前主流的超导量子计算机为例&#xff0c;其量子比特数通常在50-100个之间&#xff0c;且存在显著的噪声干扰。这种硬件限制使得许多经典优化问题难以直接映射到量子设备上求…...

render_async嵌套渲染:构建复杂异步界面的完整解决方案

render_async嵌套渲染&#xff1a;构建复杂异步界面的完整解决方案 【免费下载链接】render_async render_async lets you include pages asynchronously with AJAX 项目地址: https://gitcode.com/gh_mirrors/re/render_async 在现代Web开发中&#xff0c;页面加载速度…...

Lovable电商网站搭建:如何用不到3人技术团队,72小时内上线PCI-DSS合规MVP版本?

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;Lovable电商网站搭建 Lovable 是一个面向中小商户的轻量级电商解决方案&#xff0c;采用现代 Web 技术栈构建&#xff0c;强调可扩展性、用户体验与快速部署能力。本章将指导你从零开始搭建一个具备商品展示、…...