zoukankan      html  css  js  c++  java
  • 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")
    
  • 相关阅读:
    结构本身和结构成员在内存中储存的形式
    C语言字符,字符串,字节操作常用函数
    可变参数列表
    用数组代替指针实现静态链表
    cout对象一些常用方法的总结
    cin对象的一些常用方法使用总结
    数据结构基本概念和术语总结
    GCH文件
    Ubuntu16 搭建Git 服务器
    Navicat 连接VMware中Ubuntu 下的mysql5.7遇到的坑
  • 原文地址:https://www.cnblogs.com/suolu/p/6714060.html
Copyright © 2011-2022 走看看