赞
踩
高科,先后在 IBM PlatformComputing从事网格计算,淘米网,网易从事游戏服务器开发,拥有丰富的C++,go等语言开发经验,mysql,mongo,redis等数据库,设计模式和网络库开发经验,对战棋类,回合制,moba类页游,手游有丰富的架构设计和开发经验。 (谢谢你的关注)
———————————————————————————————————————————
在 Go 语言中,条件语句用于根据不同的条件执行不同的代码。Go 语言提供了两种条件语句:if 语句和switch 语句。
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])
- }
- package main
-
- import "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 语句, else 语句中的表达式在布尔表达式为 false 时执行。
Go 编程语言中 if…else 语句的语法如下:
if 布尔表达式 {
/* 在布尔表达式为 true 时执行 */
} else {
/* 在布尔表达式为 false 时执行 */
}
if 在布尔表达式为 true 时,其后紧跟的语句块执行,如果为 false 则执行 else 语句块。
- package main
-
- import "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 main
-
- import "fmt"
-
- func main() {
- /* 定义局部变量 */
- var a int = 100
- var 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 的值为 200
- a 值为 : 100
- b 值为 : 200
switch 语句用于基于不同条件执行不同动作,每一个 case 分支都是唯一的,从上直下逐一测试,直到匹配为止。
Golang switch 分支表达式可以是任意类型,不限于常量。可省略 break,默认自动终止。
Go 编程语言中 switch 语句的语法如下:
switch var1 {
case val1:
...
case val2:
...
default:
...
}
变量 var1 可以是任何类型,而 val1 和 val2 则可以是同类型的任意值。类型不被局限于常量或整数,但必须是相同的类型;或者最终结果为相同类型的表达式。
您可以同时测试多个可能符合条件的值,使用逗号分割它们,例如:case val1, val2, val3。
- package main
-
- import "fmt"
-
- func main() {
- /* 定义局部变量 */
- var grade string = "B"
- var marks int = 90
-
- switch 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
switch 语句还可以被用于 type-switch 来判断某个 interface 变量中实际存储的变量类型。
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 do
- case 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 main
-
- import "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 = 0
- switch j {
- case 0:
- case 1:
- fmt.Println("1")
- case 2:
- fmt.Println("2")
- default:
- fmt.Println("def")
- }
- //写法三
- var k = 0
- switch 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 = 0
- switch m {
- case 0, 1:
- fmt.Println("1")
- case 2:
- fmt.Println("2")
- default:
- fmt.Println("def")
- }
- //写法四
- var n = 0
- switch { //省略条件表达式,可当 if...else if...else
- case 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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。