【go从入门到精通】if else 条件控制

作者简介:

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

Go 语言条件语句:

        在 Go 语言中,条件语句用于根据不同的条件执行不同的代码。Go 语言提供了两种条件语句:if 语句和switch 语句

if语句 

if由一个布尔表达式后紧跟一个或多个语句组成。

语法

Go 编程语言中 if 语句的语法如下:

    • 可省略条件表达式括号。
    • 持初始化语句,可定义代码块局部变量。 
    • 代码块左 括号必须在条件表达式尾部。

    if 布尔表达式 {
    /* 在布尔表达式为 true 时执行 */
    }     

if 在布尔表达式为 true 时,其后紧跟的语句块执行,如果为 false 则不执行。

 x := 0// if x > 10        // Error: missing condition in if statement
// {
// }if n := "abc"; x > 0 {     // 初始化语句未必就是定义变量, 如 println("init") 也是可以的。println(n[2])
} else if x < 0 {    // 注意 else if 和 else 左大括号位置。println(n[1])
} else {println(n[0])
}     

    注意:go不支持三元操作符(三目运算符) "a > b ? a : b"。   

例子:

package mainimport "fmt"func main() {/* 定义局部变量 */var a int = 10/* 使用 if 语句判断布尔表达式 */if a < 20 {/* 如果条件为 true 则执行以下语句 */fmt.Printf("a 小于 20\n" )}fmt.Printf("a 的值为 : %d\n", a)
}  

以上代码执行结果为:

    a 小于 20
    a 的值为 : 10    

if…else 语句

if 语句 后可以使用可选的 else 语句, else 语句中的表达式在布尔表达式为 false 时执行。

语法

Go 编程语言中 if…else 语句的语法如下:

if 布尔表达式 {
   /* 在布尔表达式为 true 时执行 */
} else {
  /* 在布尔表达式为 false 时执行 */
}   

if 在布尔表达式为 true 时,其后紧跟的语句块执行,如果为 false 则执行 else 语句块。

实例:

package mainimport "fmt"func main() {/* 局部变量定义 */var a int = 100/* 判断布尔表达式 */if a < 20 {/* 如果条件为 true 则执行以下语句 */fmt.Printf("a 小于 20\n" )} else {/* 如果条件为 false 则执行以下语句 */fmt.Printf("a 不小于 20\n" )}fmt.Printf("a 的值为 : %d\n", a)}

以上代码执行结果为:

    a 不小于 20
    a 的值为 : 100    

if 嵌套语句 你可以在 if 或 else if 语句中嵌入一个或多个 if 或 else if 语句。 

Go 编程语言中 if…else 语句的语法如下:

if 布尔表达式 1 {
   /* 在布尔表达式 1 为 true 时执行 */
   if 布尔表达式 2 {
      /* 在布尔表达式 2 为 true 时执行 */
   }
}    

你可以以同样的方式在 if 语句中嵌套 else if…else 语句

实例

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

以上代码执行结果为

    a 的值为 100 , b 的值为 200a 值为 : 100b 值为 : 200  

switch 语句

switch 语句用于基于不同条件执行不同动作,每一个 case 分支都是唯一的,从上直下逐一测试,直到匹配为止。
Golang switch 分支表达式可以是任意类型,不限于常量。可省略 break,默认自动终止。

语法

Go 编程语言中 switch 语句的语法如下:

switch var1 {
    case val1:
        ...
    case val2:
        ...
    default:
        ...
}

变量 var1 可以是任何类型,而 val1 和 val2 则可以是同类型的任意值。类型不被局限于常量或整数,但必须是相同的类型;或者最终结果为相同类型的表达式。
您可以同时测试多个可能符合条件的值,使用逗号分割它们,例如:case val1, val2, val3。

实例:

package mainimport "fmt"func main() {/* 定义局部变量 */var grade string = "B"var marks int = 90switch marks {case 90: grade = "A"case 80: grade = "B"case 50,60,70 : grade = "C"default: grade = "D"  }switch {case grade == "A" :fmt.Printf("优秀!\n" )     case grade == "B", grade == "C" :fmt.Printf("良好\n" )      case grade == "D" :fmt.Printf("及格\n" )      case grade == "F":fmt.Printf("不及格\n" )default:fmt.Printf("差\n" )}fmt.Printf("你的等级是 %s\n", grade )
}    

以上代码执行结果为:

    优秀!你的等级是 A  

Type Switch

switch 语句还可以被用于 type-switch 来判断某个 interface 变量中实际存储的变量类型。

语法

Type Switch 语法格式如下:

switch x.(type){
    case type:
       statement(s)      
    case type:
       statement(s)
    /* 你可以定义任意个数的case */
    default: /* 可选 */
       statement(s)
}   

 像我们的panic库里就有这样的代码:

func preprintpanics(p *_panic) {defer func() {text := "panic while printing panic value"switch r := recover().(type) {case nil:// nothing to docase string:throw(text + ": " + r)default:throw(text + ": type " + toRType(efaceOf(&r)._type).string())}}()for p != nil {switch v := p.arg.(type) {case error:p.arg = v.Error()case stringer:p.arg = v.String()}p = p.link}
}

 你一定不会感到陌生,实际上这种type switch的用法是非常广泛的。

实例:

package mainimport "fmt"func main() {var x interface{}//写法一:switch i := x.(type) { // 带初始化语句case nil:fmt.Printf(" x 的类型 :%T\r\n", i)case int:fmt.Printf("x 是 int 型")case float64:fmt.Printf("x 是 float64 型")case func(int) float64:fmt.Printf("x 是 func(int) 型")case bool, string:fmt.Printf("x 是 bool 或 string 型")default:fmt.Printf("未知型")}//写法二var j = 0switch j {case 0:case 1:fmt.Println("1")case 2:fmt.Println("2")default:fmt.Println("def")}//写法三var k = 0switch k {case 0:println("fallthrough")fallthrough/*Go的switch非常灵活,表达式不必是常量或整数,执行的过程从上至下,直到找到匹配项;而如果switch没有表达式,它会匹配true。Go里面switch默认相当于每个case最后带有break,匹配成功后不会自动向下执行其他case,而是跳出整个switch,但是可以使用fallthrough强制执行后面的case代码。*/case 1:fmt.Println("1")case 2:fmt.Println("2")default:fmt.Println("def")}//写法三var m = 0switch m {case 0, 1:fmt.Println("1")case 2:fmt.Println("2")default:fmt.Println("def")}//写法四var n = 0switch { //省略条件表达式,可当 if...else if...elsecase n > 0 && n < 10:fmt.Println("i > 0 and i < 10")case n > 10 && n < 20:fmt.Println("i > 10 and i < 20")default:fmt.Println("def")}
}   

以上代码执行结果为:

    x 的类型 :<nil>
    fallthrough
    1
    1
    def

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

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

相关文章

行业研究数据/报告网站 - 好用免费

前言 转眼进互联网 12 年了&#xff0c;先后在百度、汽车之家、某独角兽做业务和商业分析。与CEO、VP、业务owner等都对接过&#xff0c;1 个明显共性&#xff0c;就是大家都很关注外部行业数据&#xff0c;为决策提供参考。接下来&#xff0c;就和大家分享一下我收藏的 34 个…

迷宫(蓝桥杯)——DFS和BFS

迷宫 题目描述 下图给出了一个迷宫的平面图&#xff0c;其中标记为 1 的为障碍&#xff0c;标记为 0 的为可以通行的地方。 010000 000100 001001 110000迷宫的入口为左上角&#xff0c;出口为右下角&#xff0c;在迷宫中&#xff0c;只能从一个位置走到这 个它的上、下、左…

【数据结构】双向奔赴的爱恋 --- 双向链表

关注小庄 顿顿解馋๑ᵒᯅᵒ๑ 引言&#xff1a;上回我们讲解了单链表(单向不循环不带头链表)&#xff0c;我们可以发现他是存在一定缺陷的&#xff0c;比如尾删的时候需要遍历一遍链表&#xff0c;这会大大降低我们的性能&#xff0c;再比如对于链表中的一个结点我们是无法直接…

思通舆情 是一款开源免费的舆情系统 介绍

思通舆情 是一款开源免费的舆情系统。 支持本地化部署&#xff0c;支持在线体验。 支持对海量舆情数据分析和挖掘。 无论你是使用者还是共同完善的开发者&#xff0c;欢迎 pull request 或者 留言对我们提出建议。 您的支持和参与就是我们坚持开源的动力&#xff01;请 sta…

超越Sora!StreamingT2V AI视频模型,轻松打造120秒视觉盛宴

近日&#xff0c;来自美国德克萨斯大学奥斯汀分校&#xff08;UT奥斯丁&#xff09;等机构的研究人员提出了一项名为StreamingT2V的AI视频生成技术&#xff0c;引起了业界的广泛关注。这项技术打破了传统视频生成的局限&#xff0c;实现了高度一致且长度可扩展的视频生成&#…

C语言(结构体,联合体,枚举的讲解)

这期我们来讲解结构体&#xff0c;联合体&#xff0c;以及枚举的讲解&#xff0c;首先我们从概念开始一步一步的了解。 1&#xff0c;结构体 1.1概念 C 语言中的结构体是一种用户自定义的数据类型&#xff0c;它允许你将不同类型的变量组合在一起&#xff0c;从而形成一个新…

1978-2022年全国31省社会消费品零售总额数据

1978-2022年全国31省社会消费品零售总额数据 1、时间&#xff1a;1978-2022年 2、指标&#xff1a;社会消费品零售总额 3、范围&#xff1a;31省市 4、来源&#xff1a;整理自国家统计J和各省年鉴 5、缺失情况说明&#xff1a;1997-2022年31省市均无缺失&#xff0c; 199…

海外媒体发稿:9种高效的媒体套餐内容发稿策略分析-华媒舍

海外媒体发稿&#xff1a;9种高效的媒体套餐内容发稿策略分析高效的媒体发布和营销推广策略对公司、本人的成就尤为重要。下面我们就对于媒体套餐内容发稿营销推广策略开展全面解析&#xff0c;帮助读者掌握并应用这9种合理的思路&#xff0c;进而获得更好的媒体营销效果。 1.媒…

【Python系列】Python 中 YAML 文件与字典合并的实用技巧

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Focal Modulation Networks聚焦调制网络

摘要 我们提出了 焦点调制网络 &#xff08;简称 FocalNets) &#xff0c;其中 自注意&#xff08; SA &#xff09;被 Focal Modulation 替换&#xff0c;这种机制 包括三个组件&#xff1a;&#xff08; 1 &#xff09;通过 depth-wise Conv 提取分级的上下文信息&#xff0…

数据丢失大拯救:格式化后如何高效恢复文件

一、遭遇格式化危机&#xff0c;数据恢复有妙招 在数字化时代&#xff0c;数据丢失无疑是让人头疼的问题之一。特别是当存储设备意外格式化后&#xff0c;许多用户都会感到手足无措&#xff0c;不知如何是好。那么&#xff0c;格式化了怎么恢复呢&#xff1f;其实&#xff0c;…

黑马头条day5总结

1、surefire-reports for the individual test results. 借鉴&#xff1a;【已解决】surefire-reports for the individual test results.-CSDN博客 Please refer to D:\javashizhan01\heima-leadnews\heima-leadnews-service\heima-leadnews-article\target\surefire-report…

【@changesets/cli】变更集实战教程

一、背景概述 前端目前基于Monorepo架构的npm包开发很普遍&#xff0c;在开发完毕后&#xff0c;我们需要对包进行版本号升级&#xff0c;并且部署&#xff0c;这些操作如果是手动来操作的话&#xff0c;很麻烦&#xff0c;而且容易出错。 例如有这样的场景&#xff1a; -ap…

【Java程序设计】【C00345】基于Springboot的船舶监造管理系统(有论文)

基于Springboot的船舶监造管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 项目获取 &#x1f345;文末点击卡片获取源码&#x1f345; 开发环境 运行环境&#xff1a;推荐jdk1.8&#xff1b; 开发工具&#xff1a;eclipse以及i…

敏捷开发最佳实践:学习与改进维度实践案例之会诊式培养敏捷教练

自组织团队能够定期反思并采取针对性行动来提升人效&#xff0c;但2022年的敏捷调研发现&#xff0c;70%的中国企业在学习和改进方面仍停留在团队级。本节实践案例将分享“会诊式培养敏捷教练”的具体做法&#xff0c;突出了敏捷以人为本的学习和改进&#xff0c;强调了通过人员…

Java前缀和

一维前缀和&#xff1a; public class Main {private static final int N 100010;public static void main(String[] args) {int[] s new int[N];int[] a new int[N];int n 10;// 定义10个数for (int i 1; i < n; i) {a[i] (int) (Math.random() * 10);}for (int i 1…

大模型时代的向量数据库:原理解析和应用案例

大家好&#xff0c;在人工智能领域&#xff0c;数据处理和加工的需求愈发增加。随着人们深入探索AI高级的应用&#xff0c;如图像识别、语音搜索和推荐引擎等&#xff0c;数据的复杂性也在不断地增加。此时传统的数据库存储方式已不能完全满足需求&#xff0c;向量数据库应运而…

Java零基础入门到精通_Day 2

18 算数运算符 - * / % 整数的运算只能得到整数 除非用浮点数进行运算&#xff08;得到浮点数&#xff09; public class Base_002 {public static void main(String[] args) {double a 6.0;int b 4;System.out.println(a/b); //1.5} } 19 字符的操作 public class Base_0…

大模型面试准备(五):图解 Transformer 最关键模块 MHA

节前&#xff0c;我们组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学&#xff0c;针对大模型技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何备战、面试常考点分享等热门话题进行了深入的讨论。 合集在这…

【Godot4自学手册】第二十九节使用Shader来实现敌人受伤的闪白效果

在Godot 4中&#xff0c;Shader是用来为材质提供自定义渲染效果的程序。材质可以应用于MeshInstance、CanvasItem和ParticleEmitter等节点。Shader可以影响顶点的变换、片段&#xff08;像素&#xff09;的颜色&#xff0c;以及光照与物体的交互。 在Godot中&#xff0c;Shader…