【Go语言】【8】GO语言的条件语句和选择语句

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://qingkechina.blog.51cto.com/5552198/1618317

一、条件语句

条件语句即if-else语句,通常用来判断条件是否满足,下面通过猜价格游戏来了解条件语句:

1、猜价格游戏

假如有一件商品价格为81元,在[0,100]范围之内

系统请猜测者输入一个价格

猜测者:50

系统提示:低了

猜测者:87

系统提示:高了

猜测者:83

系统提示:高了

猜测者:81

系统提示:恭喜您猜对了

最终效果如下图:

2、猜价格代码实现

package main

import (

   "fmt"

   "math/rand"

   "time"

)

func main() {

   randrom := rand.Intn(100)

   fmt.Println("请输入0至100范围内的整数价格")

   for {

      var input int

      fmt.Scanf("%d\n", &input)

      if input < randrom {

         fmt.Println("低了")

      } else if input > randrom {

         fmt.Println("高了")

      } else {

         fmt.Println("恭喜您猜对了")

         break

      }

   }

   time.Sleep(time.Second * 10)

}

3、代码解释

在GOROOT环境变量的src目录创建guess.go文件(GOROOT的介绍可参见《【1】windows操作系统下GO环境配置》)

package main

表示guess.go所属的包为main包,包是GO语言中的基本单位,要生成GO可执行程序,必须建立一个名称为main的包,并且该包中必须包含一个叫main()的函数,它是GO可执行程序的入口

import (

   "fmt"

   "math/rand"

   "time"

)

表示该程序引入三个依赖包,依次为fmt、math/rand和time。其中fmt即为GO的标准格式包,主要负责输入输出用的; math/rand是GO的math随机数包;time是GO的计时包,一般用于并发

func main() {

}

GO语言的main()函数,不能带参数,也不能定义返回值,并且一个包中只能有一个main()函数

randrom := rand.Intn(100)

这里调用了math/rand包中的Intn()函数,用于生成一个0~100范围内的整数,并把这个整数赋值给变量randrom

fmt.Println("请输入0至100范围内的整数价格")

调用fmt包中的Println()函数,输出提示信息

for {

}

无限循环,相当于其它语言的while,可能您会问:“哪为何不使用while”,很遗憾地告诉您:“GO语言实在太扣门了,它没有提供while关键字,它认为一个for就足够了”

var input int

fmt.Scanf("%d\n", &input)

界面停止等待猜测者输入价格,并把输入的价格赋值给input变量

if input < randrom {

   fmt.Println("低了")

} else if input > randrom {

   fmt.Println("高了")

} else {

   fmt.Println("恭喜您猜对了")

   break

}

如果输入价格低于随机数,系统则提示猜测者给的价格低了;若输入价格高于随机数,系统则提示猜测者给的价格高了;否则提示猜测正确,然后退出无限循环

time.Sleep(time.Second * 10)

猜测者猜对之后界面停止10秒后退出

4、条件语句的使用

此条件语句使用Java写应该如下:

if (input < randrom)

{

   System.out.println("低了")

else if (input > randrom)

{

   System.out.println("高了")

}

else

{

   System.out.println("恭喜您猜对了")

}

通过与Java语法对比,更能清楚地了解到GO语法

  • if或else if之后的条件不需要括号括起来
  • 条件右侧的左大括号与条件必须在同一行

除此之外,GO语言的if之后还可以初始化表达式,例如:

if a := 1; a < 2 {

    fmt.Println("if之后可以根初始化表达式")

}

if之后直接声明了一个变量a,并把1赋值给a,然后再判断变量a是否小于2,若小于2则打印出信息

5、条件语句中的变量作用域

func main() {

   a := 10

   if a := 3; a > 2 {

      fmt.Println("条件语句中变量a的值为", a)

   }

   fmt.Println("main()函数中变量a的值为", a)

}

在main()函数中声明了一个变量a并赋值为10,同时在条件语句if后面也声明了一个变量a并赋值为3,这段程序是编译不能通过呢?还是可以正常运行?

从作用域上来看,该程序可以正常运行,在if条件语句中值为10的变量a是不可见的,只能看到值为3的变量a,但出了条件语句值为10的变量a就变为可见的了,其作用域如下:

6、猜价格游戏的补充说明

   在使用Sublime text进行编译时,先按ctrl + b,然后输入go build guess.go(请注意:这里是build命令),这个命令可以生成一个guess.exe文件,然后双击打开该guess.exe文件即可。

   关于GO的命令行工具后面找个专门章节来介绍 :)

二、选择语句

这里的选择语句是指switch-case语句,有过其它语言开发经验的读者对此并不陌生

switch i {

case 0:

   fmt.Println("case 0")

case 1:

   fmt.Println("case 1")

case 2:

   fmt.Println("case 2")

case 3:

   fmt.Println("case 3")

case 4:

   fmt.Println("case 4")

case 5:

   fmt.Println("case 5")

default:

   fmt.Println("default")

}

1、没有break语句

其它大部分语言在每个case语句中要增加break,否则会出现问题,假设变量i的值为3,输出结果就会变为:

case 3

default

这并不是程序开发者所期望的,但GO就不会出现这类问题,当它匹配到3时就直接短路了,后面的语句就不再执行了

2、变量i的类型

拿Java为例,在JDK7之前变量i的值必须为char或int,不支持String,但对于GO来说不仅支持string,而且支持任何类型

3、支持合并

上例匹配条件可写为:

switch i {

case 0, 1, 2:

   fmt.Println("case 0 or 1 or 2")

case 3:

   fmt.Println("case 3")

case 4, 5:

   fmt.Println("case 4 or 5")

default:

   fmt.Println("default")

}

4、switch和case后面可以是表达式

switch i := getValue(); {

case i <= 2:

   fmt.Println("case 0 or 1 or 2")

case i <= 5:

   fmt.Println("case 3 or 4 or 5")

case i <= 8:

   fmt.Println("case 6 or 7 or 8")

default:

   fmt.Println("default")

}

我们定义了一个getValue()函数,并把返回值3赋值给变量i,显示这是一个表达式,同时i <= 2或i <= 5也是表达式。值得一提的是3 <= 5同时3 <= 8,但程序只打印出满足i <= 5的条件,然后就直接短路了。读者若想不让它直接短路该如何办?这就需要fallthrough关键字了

5、fallthrough关键字

在case执行体内添加fallthrough关键字的作用是,当该case执行体执行后,还可以向下执行符合的条件,具体见截图:

6、switch后面的条件可以去除

    在上例中switch后面跟着i:=getValue();表达式,细心的读者估计已发现函数getValue()后面还有一个分号(;),若没这个分号GO编译器会报错。初次写这种表达式的人一开始可能很不舒服,所以GO语言提供了另外一种解决方案,即switch后面可以没有内容

i := getValue()

switch {

case i <= 2:

   fmt.Println("case 0 or 1 or 2")

case i <= 5:

   fmt.Println("case 3 or 4 or 5")

   fallthrough

case i <= 8:

   fmt.Println("case 6 or 7 or 8")

   fallthrough

default:

   fmt.Println("default")

}

这里把switch后面的内容清空了,但由于i值还需要存在,所以把i:=getValue()提到了switch的前面,这样switch-case内就可以访问变量i了



通过switch选择语句,读者一定能再次体会到GO语言的灵活性了吧 :)


本文出自 “青客” 博客,请务必保留此出处http://qingkechina.blog.51cto.com/5552198/1618317

时间: 2024-10-31 12:31:44

【Go语言】【8】GO语言的条件语句和选择语句的相关文章

语言相关 - 条件选择语句

在我们写脚本程序的过程中总会需要根据某个条件 或一组条件的成立情况来控制程序的流程,我们可能要判断某个数值是否大于另外一个 , 又或者是判断某个字符串里是否含有指定的子串等等.  对系统而言所有的条件判断只有 true (非零,真) 或者 false (零,假)两种可能结果.通常我们利用 ==, <>, >=等比较 运算符 来对各种对象进行比较从而建立条件.   在码栈可用下面两种条件语句:  If...Then...Else (字面意思:如果(某个条件成立)-那么(执行某些操作)-否则

请大家帮忙-实现使用C#语言,在.net开发平台中执行sql语句

问题描述 实现使用C#语言,在.net开发平台中执行sql语句 实现使用C#语言,在.net开发平台中执行sql语句了,如查询某张表数据,向某张表插入一条数据,在某张表中编辑一条数据,删除某张表的一条数据. 解决方案 给你段代码,你参考一下 using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Data.SqlClient; using System.W

《C++语言入门经典》一3.2 循环语句

3.2 循环语句 在程序中除了可以作出选择判断外,还可以重复执行指令,直到满足某个条件为止.这种 重复称为循环.循环语句包含3种形式,即while语句.do-while语句和for语句. 3.2.1 while循环语句 while循环语句的形式如下: while(表达式) { 重复执行的内容 } 其中,表达式一般是一个关系表达式或逻辑表达,其值应该是一个逻辑真(true)或假 (false),当表达式的值为真时开始循环执行语句,当表达式的值为假时退出循环,执行循环 外的下一条语句.循环每次都是执

C++编程中break语句和continue语句的学习教程_C 语言

break 语句break 语句可终止执行最近的封闭循环或其所在条件语句. 控制权将传递给该语句结束之后的语句(如果有的话). break; 备注 break 语句与 switch 条件语句以及 do.for 和 while 循环语句配合使用. 在 switch 语句中,break 语句将导致程序执行 switch 语句之外的下一语句. 如果没有 break 语句,则将执行从匹配的 case 标签到 switch 语句末尾之间的每个语句,包括 default 子句. 在循环中,break 语句将

c语言-关于if语句和switch语句 不知道怎么打 麻烦大家解一下了,万分感激!

问题描述 关于if语句和switch语句 不知道怎么打 麻烦大家解一下了,万分感激! #include void main() double a; printf("%f",a); scanf("%f",&a); switch(a) { case 'a':printf("%f",a); break; default:printf("输入的字符不是字母 "); } } 显示错误,不知道怎么打下去了 后面还有但是不知道怎么打

JAVA学习(四):Java流程控制语句(顺序结构、if条件语句、switch条件语句、循环语句与跳转语句)

Java流程控制语句 本博文将对JAVA中组成各种结构的控制语句进行重点介绍,主要内容是区别于C/C++中的流程控制语句的重点解析. 1.顺序语句 顺序结构中的语句可分为:表达式语句.空语句和复合语句三大类. 注: (1).空语句主要用来作为空循环体,其语法格式如下: : //其实就是一个分号 执行一个空语句,就是将控制转到该语句的结束点.这样,如果空语句是可以到达的,则空语句的结束点也是可以到达的. (2).复合语句又称为语句块,若语句块是空的,则控制转到语句块的结束点. 2.if条件语句 J

[Python学习] 专题二.条件语句和循环语句的基础知识

        前面讲述了"专题一.函数的基础知识",而这篇文章讲述的Python的条件语句和循环语句的基础知识.主要内容包括:         1.条件语句:包括单分支.双分支和多分支语句,if-elif-else         2.循环语句:while的使用及简单网络刷博器爬虫         3.循环语句:for的使用及遍历列表.元组.文件和字符串 前言: 语句块         在讲诉条件语句.循环语句和其他语句之前,先来补充语句块知识.(前面讲函数时已经用到过)      

Swift语言指南(七)--语言基础之布尔值和类型别名

原文:Swift语言指南(七)--语言基础之布尔值和类型别名   布尔值   Swift有一个基本布尔类型,叫做布尔(bool),布尔值又称逻辑值(logical),因为它只能为真(true)或假(false).Swift提供了两个布尔常量值:true,false: 1 let orangesAreOrange(橙子是橙子) = true 2 let turnipsAreDelicious(芜菁很美味) = false orangesAreOrange和turnipsAreDelicious被推

Shell脚本的条件控制和循环语句_linux shell

条件判断:if语句 语法格式: if [ expression ] then Statement(s) to be executed if expression is true fi 注意:expression 和方括号([ ])之间必须有空格,否则会有语法错误. if 语句通过关系运算符判断表达式的真假来决定执行哪个分支.Shell 有三种 if ... else 语句: if ... fi 语句 if ... else ... fi 语句 if ... elif ... else ... f