流程控制和循环
1.单if
(1).基础语法
1)条件表达式用空格隔开和加括号都可以,见代码。和if之间强制有空格,如果没有括号的话。
2)大括号一定不能丢
package main
import "fmt"
func main(){
var count = 29
/*if(count > 29){
count --
}else if(count == 29){
count ++
}*/
if count > 29{
count --
}else if(count == 29){
count ++
}
fmt.Println(count)
}
(2)可以在if后面自定义变量,但作用域仅限于{}内部
定义和判断用分号间隔开
package main
import "fmt"
func main(){
//可以在if后面自定义变量,但作用域仅限于里面
if age := 18;age >= 18{
age++
fmt.Println(age)
}
//fmt.Println(age)
}
2. if else双分支
注意else和{不能单独放一行,必须跟在上一个}后面
package main
import "fmt"
//if else
func main() {
var count = 29
//带空格的条件表达式
if count > 29 {
count--
}else{
count++
}
fmt.Println(count)
}
2. if else if多分支
package main
import "fmt"
//if else if else
func main() {
var count = 29
if(count > 29 && count != 0){
count --
}else if(count == 29 || count == 0){
count ++
}else{
}
fmt.Println(count)
}
3.switch
package main
import "fmt"
//switch
func main() {
var score = 66
//自上而下进行匹配
//case分支自带break,匹配执行完就退出,不需要像cpp自己加break
switch score / 10 {
case 10,11,12:
fmt.Println(10)
case 9:
fmt.Println(9)
case 8:
fmt.Println(8)
default: //default可以放在任意地方,但是一般在首部或者尾部
fmt.Println("error")
case 7:
fmt.Println(7)
}
}
(1)default可以放在任意地方,但是一般在首部或者尾部
(2)case分支自带break,匹配执行完就退出,不需要像cpp自己加break
(3)case后面可以跟多个值,比如case 1,2,3: xxxx
(4)case后面匹配的数据类型必须和表达式数据类型一致
(5)swicth可以不带表达式,然后在case后面加判断表达式
(6)switch后面定义变量(同if)用分号分割
(7)fallthrough穿透
如果匹配到当前case,那么执行到 fallthrough会继续执行下一个case的语句。相当于cpp的switch case结尾不用break
4.for
package main
import "fmt"
//for
func main() {
var count = 0
/*for i := 1; i <= 5; i++ {
count++
}
*/
//拆开写法
i := 1
for i <= 5 {
count++
i++
}
fmt.Println(count)
}
常规写法类似cpp,也可以把变量定义提到外面去,自增放到{}里,去掉分号简化
5.break
可以在for中使用,switch中隐含自带。
break默认打破当前循环,通过加label可以控制打破到哪里。
package main
import "fmt"
//for
func main() {
var count = 0
//break默认打破当前循环
//通过加label可以控制打破到哪里
label2:
for i := 1; i <= 5; i++ {
//label1:
for j := 1; j <= 5; j++ {
count++
fmt.Println("i=",i,"j=",j)
if(i == 2 && j == 2){
break label2 //跳到label2之后
}
}
}
fmt.Println(count)
}
6.continue
可以跳到label
package main
import "fmt"
//continue
func main() {
//continue
//通过加label可以控制打破到哪里
label:
for i := 1; i <= 5; i++ {
for j := 1; j <= 5; j++ {
if i != 1 && j != 2 {
continue label
}
fmt.Println("i=", i, "j=", j)
}
}
}
7.goto
8.return
结束当前函数