条件语句
if ... else if ... else 语句,如:
if num > 100{ fmt.Println(">100") } else if 0 < num { fmt.Println("<0") } else { fmt.Println("0<<num<<100") }
循环语句
GO语言中的 switch 语句分为两种,一种是表达式 switch 语句,和其它语言中的 switch 使用方法相同;另一种是类型判断 switch 语句,它类似于类型断言,但使用 type 关键字来充当被判断的类型。
表达式 switch 示例如下:
//表达式 switch switch content := getContent(); content { default: fmt.Println("Unknow language") case "Lua": break case "Python": fmt.Println("python") case "C", "C++", "Java": fmt.Println("A compiled language") }
类型判断 switch 语句示例如下:
v := "3" switch interface{}(v).(type) { case string: log.Printf("Thie string is '%s'.\n", v) case int, uint, int8, uint8, int16, uint16: log.Printf("Thie integer is %d.\n", v) default: log.Printf("Unsupported value.(type=%T)\n", v) }
此外,switch 语句还可以实现串联 if 语句的替代方案,可以使代码看起来更清晰易读,在 switch 表达式缺失的情况下, switch 判定目标会被视为布尔类型,第一个返回 true 的 case 表达式将会被执行,如:
switch { case num > 100: log.Println(">100") case num < 0: log.Println("<0") default: log.Println("0<<num<<100") }
for语句有三种用法,一是常规用法,结构先后是初始化子句、条件、后置子句,如:
sum := 0 for i := 0; i < 100; i++ { sum += i }
二是类似其它语言中 while 的作用,注意GO语言中没有while循环,如:
i := 0 for i < 100 { i += 2 }
三是类似其它语言中 foreach 的作用,用来迭代数组和字典等类型,如:
m := map[string]int{"A": 1, "B": 2} for k, _ := range m { log.Print(k) }
注意:if/for/switch 语句都可以接受一个可选的初始化子句; break\continue\goto 语句都可以跳转到指定标记,标记的定义使用 "标识符:" 的形式。
goto语句
goto语句只能配合标记来执行,跳转到指定位置,该语句在其它语言中很有争议,一般为了代码可读性都不推荐使用。
defer语句
GO语言特有的一个流程控制语句,它用来预定对一个函数的调用。它只能出现在一个函数中(假设是A函数),且只能调用另一个函数(假设是B函数),意味着在A函数结束返回时,延迟调用B函数,一般用于打开文件时的资源清理等工作。如果一个函数内部调用多个 defer 语句,则遵循后进先出的原则。defer 语句后面可以跟着匿名函数,来快速实现一些临时的功能。defer 调用的函数可以使用的变量,可以是通过参数传进来的,也可以是上下文中可以调用的变量,如果是传参进来的,则会立即被求值,如果是上下文中的变量,则不会立即被求值,而是取在 defer 函数调用时的值,这一点要注意。
异常处理语句
switch 语句
有疑问加站长微信联系(非本文作者)