GO入门——3. 控制语句

1 if

  • 条件表达式没有括号
  • 支持一个初始化表达式(可以是并行方式)
  • 左大括号必须和条件语句或else在同一行
  • 支持单行模式
  • 初始化语句中的变量为block级别,同时隐藏外部同名变量

    a := 1
	if a > 0 {
		fmt.Println("yes") //输出该结果
	}
	//加初始表达式
	if b := 2; a < b {
		fmt.Println("a<b")	//输出该结果
	}
	//加并行初始表达式
	if b, c := 0, 2; a > b && c > a {
		fmt.Println("a>b && c>a")	//输出该结果
	}
	//同名变量外部将隐藏
	if a := 2; a > 0 {
		fmt.Println(a)	//输出2
	}
	fmt.Println(a)	//输出1

2 for

  • Go只有for一个循环语句关键字,但支持3种形式
  • 初始化和步进表达式可以是多个值
  • 条件语句每次循环都会被重新检查,因此不建议在条件语句中
    使用函数,尽量提前计算好条件并以变量或常量代替
  • 左大括号必须和条件语句在同一行
	i := 0
	//死循环
	for {
		fmt.Println("进入死循环,一般用break退出")
		break
	}
	//while循环
	for i < 10 {
		fmt.Println("相当于while循环")
		i++ //go中++只能出现在等式的左边,且没有++i这种
	}
	//正常for循环,并行赋值
	for i, j := 1, 2; i < 5; i++ {
		fmt.Println(i, j)
	}

3 switch

  • 可以使用任何类型或表达式作为条件语句
  • 不需要写break,一旦条件符合自动终止
  • 如希望继续执行下一个case,需使用fallthrough语句,使用后下一个case一定会执行不管条件是否满足
  • 支持一个初始化表达式(可以是并行方式),右侧需跟分号
  • 左大括号必须和条件语句在同一行
a := 0
	//普通的switch
	switch a {
	case 0:
		fmt.Println("0")
		fallthrough
	case 1:	//此时这个case一定会执行
		fmt.Println("1")
	case 2:	//不执行
		fmt.Println("2")
	default:
		fmt.Println("default")
	}
	//相当于if,case中一定要是条件
	switch {
	case 0 != 0:
		fmt.Println("0")
	case 1 > 2:
		fmt.Println("1")
	case 2 == 2:	//执行
		fmt.Println("2")
		fallthrough
	default:	//执行
		fmt.Println("default")
	}
	//带初始化表达式的switch
	switch a := 6; a {
	case 6:		//执行,switch中声明的变量会隐藏调外部变量
		fmt.Println(a)
	case 1:
		fmt.Println("1")
	case 2:
		fmt.Println("2")
	default:
		fmt.Println("default")
	}

4 goto,break,continue

  • 三个语法都可以配合标签使用
  • 标签名区分大小写,若不使用会造成编译错误
  • break与continue配合标签可用于多层循环的跳出
  • goto是调整执行位置,与其它2个语句配合标签的结果并不相同
	//label加continue
LABEL:
	for i := 0; i < 5; i++ {
		for {
			fmt.Println("二层for", i) //输出5次
			continue LABEL
		}
	}
	//label加break
LABEL1:
	for i := 0; i < 5; i++ {
		for {
			fmt.Println("二层for", i)
			break LABEL1
		}
	}
	//label加goto,如果不用count判断则是一个无限循环
	count := 0
LABEL2:
	if count > 2 {
		goto LABEL3
	}
	for i := 0; i < 5; i++ {
		for {
			count++
			fmt.Println("无限循环", count)
			goto LABEL2
		}
	}
LABEL3:
	fmt.Println("over")
原文地址:https://www.cnblogs.com/suolu/p/6714060.html