在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
Go在流程控制方面的特点如下: 1.代码块和作用域代码块就是一个由花括号包裹地表达式和语句的序列。当然,代码块中也可以不包含任何内容,即:空代码块。 所有Go代码形成了一个最大地代码块,即:全域代码块; 在Go中,使用代码块表示词法上的作用域范围,具体规则如下: package main import ( "fmt" ) var v = "1,2,3" //最外层标识符 func main() { v := []int{1, 2, 3} //第二次赋值 if v != nil { var v = 123 //第三次赋值 fmt.Printf("%v\n", v) } } //结果:123 其中,变量v被声明3次。当判断v是否非nil时,v代表的时那个切片。
2.if语句if语句会根据条件表达式来执行两个分支中的一个。 例如: var number int //省略 if 100 < number { number++ } 又如: if 100 < number { number++ }else { number-- } if语句还可以包含一条初始化的子语句,用于初始化局部变量: if diff := 100 - number;100 < diff { number++ }else { number-- } 此外,它还支持串联: if diff := 100 - number;100 < diff { //先进行赋值操作,在逻辑判断 number++ }else if 200 < diff { number-- }else { number -= 2 } 其中条件表达式的求值顺序是自上而下的。只有第一个结果为true的表达式对应的分支会被选中并执行。
3.switch语句switch语句也提供了一种多行分支执行的方法。 (1)表达式switch语句在表达式switch语句中,switch表达式和所有case携带的表达式(也称为case表达式)都会被求值,并且执行顺序是自左向右、自下而上。 package main import ( "fmt" ) var content string //省略 switch content { default: fmt.Println("不知道什么语言") case "python": fmt.Fprintln("一门解释型语言") case "go": fmt.Println("一门编译型语言") switch语句也可以包含一条子语句来初始化局部变量: switch lang := strings.TrimSpace(content); lang { default: fmt.Println("不知道什么语言") case "python": fmt.Fprintln("一门解释型语言") case "go": fmt.Println("一门编译型语言") } 可以在switch语句中使用fallthrough,来向下一个case语句转移流程控制权。 switch lang := strings.TrimSpace(content); lang { case "Ruby": fallthrough case "Python": fmt.Println("一门解释型语言") case "C","Java","Go": fmt.Println("一门编译型语言") default: fmt.Println("什么都不是") } 只要lang的值等于Ruby或python,第2个case语句就会执行。其实可以放在一个case中。
(2)类型switch语句类型switch语句将对类型进行判定,而不是值。 var v interface{} //省略 switch v.(type) { case string: fmt.Printf("The string '%s'.\n",v.(string)) case int,uint,int8,uint8: fmt.Printf("The integer is %d.\n",v) default: fmt.Printf("Unsupported value.(type%T)\n",v) } 类型switch语句的switch表达式会包含一个特殊的类型断言,例如v.(type)。 switch i := v.(type) { case string: fmt.Printf("The string '%s'.\n",i) case int,uint,int8,uint8: fmt.Printf("The integer is %d.\n",i) default: fmt.Printf("Unsupported value.(type%T)\n",i) } 这里的i := v.(type)使经类型转换后的值得以保存。i的类型一定会是v的值的实际类型。
4.for语句for语句用于根据给定的条件重复执行一个代码块。这个条件或由for子句直接给出,或从range子句中获得。 一条for语句中可以携带一条for子句。for子句可以包含初始化子句、条件子句和后置子句。 var number int for i := 0; i < 100; i++ { //i := 0初始化语句 i++后置语句 number++ } var j uint = 1 for;j%5 != 0; j *= 3 { //省略初始化子句 number++ } for k := 1; k%5 != 0; { //省略后置子句 k *= 3 number++ } 在for子句的初始化子句和后置子句同时被省略,或者其中的所有部分都省略的情况下,分隔符":"可以省略。 var m = 1 for m < 50 { m *= 3 }
(2)range子句一条for语句可以携带一条range语句,这样就可以迭代出一个数组或者切片值中的每个元素、 ints := []int{1, 2, 3, 4, 5} for i, d := range ints { fmt.Printf("Index:%d,value:%d\n", i, d) } 在range关键字右边的是range表达式。range表达式一般只会在迭代开始前被求值一次. 使用range子句,有3点需要注意:
|
请发表评论