换个语言学一下 Golang (6)——控制流程
Go语言的控制结构关键字只有if..else if..else
,for
和 switch
。
而且在Go中,为了避免格式化战争,对程序结构做了统一的强制的规定。看下下面的例子。
请比较一下A程序和B程序的不同之处
A程序
package main
import (
"fmt"
)
func main() {
fmt.Println("hello world")
}
B程序
package main
import (
"fmt"
)
func main()
{
fmt.Println("hello world")
}
在上面的两个例子中只有A例的写法是对的。因为在Go语言中,强制了{}
的格式。如果我们试图去编译B程序,那么会发生如下的错误提示。
syntax error: unexpected semicolon or newline before {
if..else if..else
用来判断一个或者多个条件,然后根据条件的结果执行不同的程序块。举个简单的例子。
package main
import (
"fmt"
)
func main() {
var dog_age =
if dog_age > {
fmt.Println("A big dog")
} else if dog_age > && dog_age <= {
fmt.Println("A small dog")
} else {
fmt.Println("A baby dog")
}
}
上面的例子判断狗狗的年龄如果(if)
大于10就是一个大狗;否则判断(else if)
狗狗的年龄是否小于等于10且大于1,这个时候狗狗是小狗狗。否则(else)
的话(就是默认狗狗的年龄小于等于1岁),那么狗狗是Baby狗狗。
在上面的例子中,我们还可以发现Go的if..else if..else语句的判断条件一般都不需要使用()
。当然如果你还是愿意写,也是对的。另外如果为了将某两个或多个条件绑定在一起判断的话,还是需要括号()
的。
比如下面的例子也是对的。
package main
import (
"fmt"
)
func main() {
const Male = 'M'
const Female = 'F'
var dog_age =
var dog_sex = 'M'
if (dog_age == && dog_sex == 'M') {
fmt.Println("dog")
}
}
但是如果你使用Go提供的格式化工具来格式化这段代码的话,Go会智能判断你的括号是否必须有,否则的话,会帮你去掉的。你可以试试。
go fmt test_bracket.go
然后你会发现,咦?!果真被去掉了。
另外因为每个判断条件的结果要么是true要么是false,所以可以使用&&
,||
来连接不同的条件。使用!
来对一个条件取反。
Go 的 if 还有一个强大的地方就是条件判断语句里面允许声明一个变量,这个变量的作用域只能在该条件逻辑块内,其他地方就不起作用了,如下所示:
package main import "fmt"
func main() {
if num := ; num < {
fmt.Println(num, "is negative")
} else if num < {
fmt.Println(num, "has 1 digit")
} else {
fmt.Println(num, "has multiple digits")
}
}
运行结果:
switch
switch的出现是为了解决某些情况下使用if判断语句带来的繁琐之处。
例如下面的例子:
package main
import (
"fmt"
)
func main() {
//score 为 [0,100]之间的整数
var score int =
if score >= && score <= {
fmt.Println("优秀")
} else if score >= && score < {
fmt.Println("良好")
} else if score >= && score < {
fmt.Println("一般")
} else if score >= && score < {
fmt.Println("及格")
} else {
fmt.Println("不及格")
}
}
在上面的例子中,我们用if..else if..else来对分数进行分类。这个只是一般的情况下if判断条件的数量。如果if..else if..else的条件太多的话,我们可以使用switch来优化程序。比如上面的程序我们还可以这样写:
package main
import (
"fmt"
)
func main() {
//score 为 [0,100]之间的整数
var score int =
switch score / {
case :
case :
fmt.Println("优秀")
case :
fmt.Println("良好")
case :
fmt.Println("一般")
case :
fmt.Println("及格")
default:
fmt.Println("不及格")
}
}
关于switch的几点说明如下:
(1) switch的判断条件可以为任何数据类型。
package main
import (
"fmt"
)
func main() {
var dog_sex = "F"
switch dog_sex {
case "M":
fmt.Println("A male dog")
case "F":
fmt.Println("A female dog")
}
}
(2) 每个case后面跟的是一个完整的程序块,该程序块不需要{}
,也不需要break结尾
,因为每个case都是独立的。
(3) 可以为switch提供一个默认选项default,在上面所有的case都没有满足的情况下,默认执行default后面的语句。
for
for用在Go语言的循环条件里面。比如说要你输出1…100之间的自然数
package main
import (
"fmt"
)
func main() {
var i int =
for ; i <= ; i++ {
fmt.Println(i)
}
}
在上面的例子中,首先初始化变量i为1,然后在for循环里面判断是否小于等于100,如果是的话,输出i,然后再使用i++来将i的值自增1。上面的例子,还有一个更好的写法,就是将i的定义和初始化也放在for里面。如下:
package main
import (
"fmt"
)
func main() {
for i := ; i <= ; i++ {
fmt.Println(i)
}
}
在Go里面没有提供while关键字,如果你怀念while的写法也可以这样:
package main
import (
"fmt"
)
func main() {
var i int =
for i <= {
fmt.Println(i)
i++
}
}
或许你会问,如果我要死循环呢?是不是for true
?呵呵,不用了,直接这样。
package main
import (
"fmt"
)
func main() {
var i int =
for {
fmt.Println(i)
}
}
如果你要是没写fmt.Println(i)会有错误
导入但未使用:“fmt”,防止你乱引用。
以上就是Go提供的全部控制流程了。
最新文章
- C语言数组空间的初始化详解
- 关于Android真机调测Profiler
- redis错误总结
- win7 64位下jboss配置
- 带你认识HTML5中的WebSocket
- 如何查看.Net FrameWork,VC++ 等安装包的启动参数
- IO 图
- Mobiscroll日期插件使用
- Server.MapPath找不到命名空间,解决办法
- Mat, IplImage, CvMat, Cvarr关系及元素获取
- [Abp 源码分析]零、文章目录
- 【转】APK反编译
- Linux系统调用之内存管理
- sentinel-dashboard安装、运行(ubuntu)
- PentestBox在win10里打不开工具
- 《Spring_Four》第二次作业 基于Jsoup的大学生考试信息展示系统开题报告
- MFC笔记2
- Java并发案例02---生产者消费者问题
- 洛谷P1667/[10.22 模拟赛] 数列 (思维+模拟)
- 玩转Docker之常用API(四)
热门文章
- java项目中使用ffmpeg剪辑部分视频
- android细节之android.intent.category.DEFAULT的使用
- java.lang.Exception: No tests found matching
- java多线程(二)线程的生命周期
- squid4
- ODAC 安裝 (11.2.4)
- web page popup window model
- 【Spring Cloud学习之六】断路器-Hystrix
- 【ARM-Linux开发】ARM嵌入式设备Linux系统启动步骤和方式
- RobotFrameWork中使用Chrome浏览器