Golang基础-3

Go语言基础

介绍

基础

介绍

  • 本文介绍Go语言中条件语句、选择语句、循环语句、break、continue、goto关键字等相关知识。

基础

1. 条件语句
  • 实现程序逻辑时,需要通过不同的判断条件去执行相应的语句。
  • Go语言中的条件语句通过判断条件是否为 true/false 来决定执行相关语句。
  • Go语言中条件语句有 if、if else、if else if等
package mainimport "fmt"func main() {var a int = 16// 单分支,大括号必须存在,Go语言格式严格if a == 16 {fmt.Println("a == 16")}// 双分支a = 20if a != 20 {fmt.Println("a != 20")} else {fmt.Println("a == 20")}// 多分支,else if 分支任意数量、最后的 else 可选a = 40if a <= 20 {fmt.Println("a <= 20")} else if a <= 40 {fmt.Println("a <= 40")} else if a <= 60 {fmt.Println("a <= 60")} else {fmt.Println("a > 60")}// 局部变量,仅在条件语句作用域内可访问a = 30if s := 16; s == a {fmt.Println("s == a")} else {fmt.Println("s != a")}// 分支嵌套,可任意嵌套,实际开发中不要嵌套太多层,嵌套太多层的代码需要优化设计a = 80if a > 60 {if a > 80 {fmt.Println("a > 80")} else {fmt.Println("a <= 80")}} else if a > 40 {if a > 50 {fmt.Println("a > 50")} else {fmt.Println("a <= 50")}} else {fmt.Println("a <= 40")}
}

输出结果
a == 16
a == 20
a <= 40
s != a
a <= 80

2. 选择语句
  • 根据输入条件的不同选择不同的语句块进行执行(多分支)
  • 基本语法
switch 表达式 {case 值1, 值2... :语句块1case 值3, 值4... :语句块2...default : 语句块
}
  • switch后边是一个表达式(常量值、变量、具有返回值的函数等)
package mainimport "fmt"func main() {var a int = 16var str string = "id"const c int = 20// switch后边是常量值switch 20 {case 20:fmt.Println("20")default:fmt.Println("***")}// switch后边是变量switch a {case 20:fmt.Println("20")default:fmt.Println(a)}// switch后边是常量switch c {case 20:fmt.Println("20")default:fmt.Println(c)}// switch后边是字符串switch str {case "id":fmt.Println("id")default:fmt.Println(str)}// switch后边是函数switch getValue() {case 30:fmt.Println("30")default:fmt.Println("***")}
}func getValue() int {return 30
}

输出结果
20
16
20
id
30

  • switch后边可不带表达式,当作if使用
package mainimport "fmt"func main() {var a int = 20// switch后边自定义局部变量switch {case a == 20:fmt.Println("a == 20")default:fmt.Println(a)}
}

输出结果:a == 20

  • switch后边可直接声明/定义一个变量,分号结束
package mainimport "fmt"func main() {// switch后边自定义局部变量switch s := 10; s {case 10:fmt.Println("10")default:fmt.Println(s)}
}

输出结果:10

  • switch语句分支Go语言默认执行完符合条件的case后会自动break(跳出switch语句块),若要执行完当前分支后继续执后一个分支,需要在分支中添加关键字fallthrough
package mainimport "fmt"func main() {var a int = 20// case 分支使用 fallthrough 穿透switch {case a == 20:fmt.Println("a == 20")fallthroughcase a != 20:fmt.Println("a != 20")default:fmt.Println(a)}
}

输出结果
a == 20
a != 20

  • case后值的数据类型必须和switch后表达式的数据类型一致
  • case后可跟多个表达式,使用逗号分隔
package mainimport "fmt"func main() {var a int = 20// case 分支多个值switch a {case 10, 30:fmt.Println("10, 30")case 20:fmt.Println("20")default:fmt.Println(a)}// case 分支多个表达式switch {case a < 10, a > 30:fmt.Println("a < 10, a > 30")case a >= 10, a <= 30:fmt.Println("a >= 10, a <= 30")default:fmt.Println(a)}
}

输出结果
20
a >= 10, a <= 30

  • case后边为值时,各case分支的值不能重复
  • default语句是可选的
3. 循环语句
  • 实际需要重复执行一段代码时,需要循环结构
  • Go语言中使用 for 支持循环结构
  • break关键字用于跳出当前循环结构
  • continue关键字用于当前循环结构中,表示这一轮循环从当前位置结束,返回去重新开始执行下一轮循环
  • for 循环可嵌套,切记注意程序执行效率
  • for 循环基本语法格式
for 初始表达式; 布尔表达式; 迭代因子 {循环体
}
  • for-range 用于遍历可迭代对象中的每个元素,例如字符串,数组,切片,映射,通道等
package mainimport "fmt"func main() {// 计算数字 1~100 加法var sum int = 0// 标准 for 循环for i := 1; i <= 100; i++ {sum += i}fmt.Println("1 sum: ", sum)// for 省略初始化因子sum = 0var i int = 1for ; i <= 100; i++ {sum += i}fmt.Println("2 sum: ", sum)// for 省略初始化因子、迭代因子,类似 while 循环sum = 0i = 1for i <= 100 {sum += ii++}fmt.Println("3 sum: ", sum)// 无限 for 循环sum = 0i = 1for {if i <= 100 {sum += i} else { // i > 100break // 注意此处使用 break 跳出 for 循环}i++}fmt.Println("4 sum: ", sum)
}

输出结果
1 sum: 5050
2 sum: 5050
3 sum: 5050
4 sum: 5050

package mainimport "fmt"func main() {// for-rangevar str string = "今天是sheme天气"for i, v := range str {fmt.Printf("index: %d, value: %c\n", i, v)}
}

输出结果
index: 0, value: 今
index: 3, value: 天
index: 6, value: 是
index: 9, value: s
index: 10, value: h
index: 11, value: e
index: 12, value: n
index: 13, value: m
index: 14, value: e
index: 15, value: 天
index: 18, value: 气

package mainimport "fmt"func main() {// for 循环嵌套for i := 1; i < 10; i++ {for j := i; j < 10; j++ {fmt.Printf("%v * %v = %v\t", i, j, i*j)}fmt.Printf("\n")}
}

输出结果
1 * 1 = 1 1 * 2 = 2 1 * 3 = 3 1 * 4 = 4 1 * 5 = 5 1 * 6 = 6 1 * 7 = 7 1 * 8 = 8 1 * 9 = 9
2 * 2 = 4 2 * 3 = 6 2 * 4 = 8 2 * 5 = 10 2 * 6 = 12 2 * 7 = 14 2 * 8 = 16 2 * 9 = 18
3 * 3 = 9 3 * 4 = 12 3 * 5 = 15 3 * 6 = 18 3 * 7 = 21 3 * 8 = 24 3 * 9 = 27
4 * 4 = 16 4 * 5 = 20 4 * 6 = 24 4 * 7 = 28 4 * 8 = 32 4 * 9 = 36
5 * 5 = 25 5 * 6 = 30 5 * 7 = 35 5 * 8 = 40 5 * 9 = 45
6 * 6 = 36 6 * 7 = 42 6 * 8 = 48 6 * 9 = 54
7 * 7 = 49 7 * 8 = 56 7 * 9 = 63
8 * 8 = 64 8 * 9 = 72
9 * 9 = 81

  • break跳出循环体
package mainimport "fmt"func main() {for i := 0; i < 4; i++ {if i == 2 { // 满足条件时跳出 for 循环break}fmt.Println(i)}
}

输出结果
0
1

  • continue停止当前循环体,开始下一轮循环体
package mainimport "fmt"func main() {for i := 0; i < 4; i++ {if i == 2 { // 满足条件时,重新执行下一轮循环continue}fmt.Println(i)}
}

输出结果
0
1
3

4. goto关键字
  • 尽量少使用 goto 关键字
  • 通过 goto 语句可以任意跳转到当前函数指定的 label 位置
package mainimport "fmt"func main() {fmt.Println("-----1-----")fmt.Println("-----2-----")fmt.Println("-----3-----")goto ENDfmt.Println("-----4-----")fmt.Println("-----5-----")
END:fmt.Println("-----6-----")
}

输出结果
-----1-----
-----2-----
-----3-----
-----6-----

  • break 和 continue 后也可以指定 label 用于指定跳出或跳过指定 label 同层级的循环
package mainimport "fmt"func main() {
END1:for i := 0; i < 4; i++ {if i == 2 { // 满足条件时,执行跳转continue END1}fmt.Println("-----", i, "-----")}END2:for i := 0; i < 4; i++ {if i == 2 { // 满足条件时,执行跳转break END2}fmt.Println("=====", i, "=====")}
}

输出结果
----- 0 -----
----- 1 -----
----- 3 -----
===== 0 =====
===== 1 =====

起始

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

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

相关文章

初识C++ · 入门(1)

目录 前言&#xff1a; 1 命名空间 2 输入和输出 3 缺省参数 5 函数重载 前言&#xff1a; C与C语言是有一定交集的&#xff0c;可以理解为本贾尼在使用C语言的时候认为有缺陷&#xff0c;于是加了一些小语法进行改良&#xff0c;后来经过委员会的修改&#xff0c;C98问世…

深度学习故障诊断实战 | 数据预处理之基于滑动窗的数据样本增强

前言 本期给大家分享介绍如何基于滑动窗方法进行数据样本增强 背景 深度学习模型训练需要大量的样本。在故障诊断领域&#xff0c;每个类别大都会达到300个样本。但是在实际公开数据集中&#xff0c;以CWRU数据集为例&#xff0c;每个类别只有24组数据&#xff0c;这明显是不…

CSGO赛事管理系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)

本项目包含可运行源码数据库LW&#xff0c;文末可获取本项目的所有资料。 推荐阅读100套最新项目持续更新中..... 2024年计算机毕业论文&#xff08;设计&#xff09;学生选题参考合集推荐收藏&#xff08;包含Springboot、jsp、ssmvue等技术项目合集&#xff09; 目录 1. 系…

ExpandableNotificationRow的父类layout

ExpandableNotificationRow的父类layout NotificationsQuickSettingsContainer NotificationPanelView NotificationShadeWindowView ExpandableNotificationRow 就是下图的一个 Notification&#xff1a; USB连接 。 何时创建一个ExpandableNotificationRow 并且被添加到Not…

Spring Boot 工程开发常见问题解决方案,日常开发全覆盖

本文是 SpringBoot 开发的干货集中营&#xff0c;涵盖了日常开发中遇到的诸多问题&#xff0c;通篇着重讲解如何快速解决问题&#xff0c;部分重点问题会讲解原理&#xff0c;以及为什么要这样做。便于大家快速处理实践中经常遇到的小问题&#xff0c;既方便自己也方便他人&…

护眼台灯对眼睛有危害吗?多款预防近视的台灯推荐

在日常生活中&#xff0c;灯光对于我们而言&#xff0c;是非常重要的&#xff0c;尤其是在夜晚&#xff0c;不管是学习还是办公都需要合适的光线环境。很多家长为了保护孩子的视力会选择从台灯下手&#xff0c;但又不知道护眼台灯对眼睛有危害吗&#xff1f;今天就来好好的告诉…

【MySQL】数据库--表操作

目录 一、创建表 二、查看表 三、修改表 1. 添加字段--add 2.修改表名--rename to 3.修改列名--change 4.修改字段的数据类型--modify 5.删除字段&#xff08;列&#xff09;--drop 四、删除表 一、创建表 create [temporary]table[if not exists]table_name [([colu…

vscode插件

一、codeGeex 自动解析代码添加注释 二、Prettier - Code formatter 代码格式化插件 // “prettier.useEditorConfig”: false, // 是否使用editorConfig配置文件中的设置 “prettier.semi”: true, // 句尾是否填加分号 “prettier.singleQuote”: false, //是否使用单引号 “…

python如何获取word文档的总页数

最近在搞AI. 遇到了一个问题&#xff0c;就是要进行doc文档的解析。并且需要展示每个文档的总页数。 利用AI. 分别尝试了chatGPT, 文心一言&#xff0c; github copilot&#xff0c;Kimi 等工具&#xff0c;给出来的答案都不尽如人意。 给的最多的查询方式就是下面这种。 这个…

【Canvas与艺术】硬朗风格十二棱表表盘

【效果图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>硬朗风格十二棱表表盘</title><style type"text/css…

Qt+OpenGL入门教程(三)——绘制三角形

通过前两篇文章的学习&#xff0c;我想大家应该有了基本的理解&#xff0c;我们接下来实操一下。 创建Qt OpenGL窗口 QOpenGLWidget QGLWidget是传统QtOpenGL模块的一部分&#xff0c;与其他QGL类一样&#xff0c;应该在新的应用程序中避免使用。相反&#xff0c;从Qt5.4开始…

新手如何用Postman做接口自动化测试?

1、什么是自动化测试 把人对软件的测试行为转化为由机器执行测试行为的一种实践。 例如GUI自动化测试&#xff0c;模拟人去操作软件界面&#xff0c;把人从简单重复的劳动中解放出来&#xff0c;本质是用代码去测试另一段代码&#xff0c;属于一种软件开发工作&#xff0c;已…

【检索增强】Retrieval-Augmented Generation for Large Language Models:A Survey

本文简介 1、对最先进水平RAG进行了全面和系统的回顾&#xff0c;通过包括朴素RAG、高级RAG和模块化RAG在内的范式描述了它的演变。这篇综述的背景下&#xff0c;更广泛的范围内的法学硕士研究RAG的景观。 2、确定并讨论了RAG过程中不可或缺的核心技术&#xff0c;特别关注“…

深入Facebook的世界:探索数字化社交的无限可能性

引言 随着数字化时代的到来&#xff0c;社交媒体平台已经成为了人们日常生活中不可或缺的一部分&#xff0c;而其中最为突出的代表之一便是Facebook。作为全球最大的社交媒体平台之一&#xff0c;Facebook不仅仅是一个社交网络&#xff0c;更是一个数字化社交的生态系统&#…

机器人机械手加装SycoTec 4060 ER-S电主轴高精密铣削加工

随着科技的不断发展&#xff0c;机器人技术正逐渐渗透到各个领域&#xff0c;展现出前所未有的潜力和应用价值。作为机器人技术的核心组成部分之一&#xff0c;机器人机械手以其高精度、高效率和高稳定性的优势&#xff0c;在机械加工、装配、检测等领域中发挥着举足轻重的作用…

C#使用iText7画发票PDF——字体与自定义颜色

字体可以引用windows自带的字体&#xff0c;引用方式如下&#xff1a; //楷体 PdfFont KT PdfFontFactory.CreateFont(“C://Windows//Fonts//SIMKAI.TTF”, PdfEncodings.IDENTITY_H); //宋体 PdfFont ST PdfFontFactory.CreateFont(“C://Windows//Fonts//SIMFANG.TTF”, P…

Spring 的 Ioc配置

HappyComponent.java package com.atguigu.Ioc_01;public class HappyComponent {// 默认包含无参的构造方法public void dowork(){System.out.println("HappyComponent.dowork");} }ClientService.java package com.atguigu.Ioc_01;静态工厂类 public class Clien…

BIM自动化简介

毫无疑问&#xff0c;BIM 方法已成功提高和提高了建筑行业流程的效率。 世界各地的各种私人机构和公共实体都认识到这一点&#xff0c;他们决定在几年内实施这种项目设计、管理和施工方法&#xff0c;最大限度地减少执行时间和经济成本。 建筑流程融入数字和技术时代&#xff…

解决Spring boot添加了actuator导致StreamBridge未自动加载的bug

案情说明 在Spring boot项目中&#xff0c;如果同时依赖了spring-cloud-starter-stream-rabbit和spring-boot-start-actuator两个包&#xff0c;启动时可能会出现StreamBridge组件找不到的问题。如下&#xff1a; *************************** APPLICATION FAILED TO START **…

Unity WebRequest 变得简单

作者简介: 高科,先后在 IBM PlatformComputing从事网格计算,淘米网,网易从事游戏服务器开发,拥有丰富的C++,go等语言开发经验,mysql,mongo,redis等数据库,设计模式和网络库开发经验,对战棋类,回合制,moba类页游,手游有丰富的架构设计和开发经验。 (谢谢你的关注…