zoukankan      html  css  js  c++  java
  • Go控制语句

    指针

    • Go虽然保留了指针,但是与其他编程语言不通的是,在Go当中不支持指针运算以及“->”运算符,而是直接采用“.”选择符来操作指针目标对象的成员。
    • 操作符“&”取变量地址,使用“*”通过指针间接访问目标对象
    • 默认值是nil而非NULL
    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    	a := 1
    	var p *int = &a
    	fmt.Println(p) //打印的是p所指向的内存地址
    	fmt.Println(*p) //取出p指针指向地址的值,也就是a的值
    
    }
    
    

    递增递减语句

    • 在go当中,++与--是作为语句而并非作为表达式
    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    	a := 1
    	//a := a++ //表达式是可以直接放在等号右边的,而此时是不行的
    	a++ //只能这样使用
    	var p *int = &a
    	fmt.Println(p)
    	fmt.Println(*p)
    
    }
    

    判断语句if

    • 条件表达式没有括号
    • 支持一个初始化表达式(可以是并行方式)
    • 左大括号必须和条件语句或else在同一行
    • 支持单行模式
    • 初始化语句中的变量为block级别,同时隐藏外部同名变量
    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    	a := 10
    	if a := 1; a > 0 { //初始化语句中定义的变量它的作用域只在这个初始化语句块,超出这个语句块,这个变量就会变成没有定义的
    		fmt.Println(a) //此时外部的a会被隐藏,输出内部语句a,也就是1
    	}
    	fmt.Println(a) //if语句执行完毕以后,会打印出外部的a,也集是10
    }
    
    

    循环语句for

    • Go只有for一个循环语句关键字,但支持3种形式
    • 初始化和步进表达式可以是多个值
    • 条件语句每次循环都会被重新检查,因此不建议在条件语句中使用函数,尽量提前计算好条件并以变量或常量替代
    • 左大括号必须和语句在同一行
    //第一种形式,类似于while True的应用
    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    	a := 1
    	for {
    		a++
    		if a > 3 {
    			break
    		}
    		fmt.Println(a)
    	}
    	fmt.Println("over!")
    }
    
    //第二种形式,自己本身带条件的语句,也属于变异的while语句
    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    	a := 1
    	for a <= 3 {
    		a++
    		fmt.Println(a)
    	}
    	fmt.Println("over!")
    }
    
    //第三种形式,for循环常用形式
    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    	a := 1
    	for i := 0; i < 3; i++ {
    		a++
    		fmt.Println(a)
    	}
    	fmt.Println("over")
    
    }
    

    选择语句switch

    • 可以使用任何类型或表达式作为条件语句
    • 不需要些break,一旦条件符合自动终止
    • 如果希望继续下一个case,需要使用fallthrough语句
    • 支持一个初始化表达式(可以是并行方式),右侧需要跟分号
    • 左大括号必须和条件语句在同一行
    //第一种形式
    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    	a := 1
    	switch a { //检查的变量条件是a本身
    	case 0:
    		fmt.Println("a=0")
    	case 1:
    		fmt.Println("a=1")
    	default:
    		fmt.Println("None")
    	}
    
    }
    
    //第二种形式
    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    	a := 1
    	switch { //如果没有在switch后面跟条件表达式,就必须在case后面跟条件表达式
    	case a >= 0:
    		fmt.Println("a>=0")
    		fallthrough //如果需要继续检查下一个case,就需要用到fallthrough
    	case a >= 1:
    		fmt.Println("a>=1")
    	default:
    		fmt.Println("None")
    	}
    
    }
    
    
    //第三种形式
    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    
    	switch a := 1; { //如果没有在switch后面跟条件表达式,就必须在case后面跟条件表达式
    	case a >= 0:
    		fmt.Println("a>=0")
    		fallthrough //如果需要继续检查下一个case,就需要用到fallthrough
    	case a >= 1:
    		fmt.Println("a>=1")
    	default:
    		fmt.Println("None")
    	}
    	fmt.Println(a)//此时无法找到a
    }
    //不管是if、for、switch语句当中,进行初始化的变量,都是一个局部变量,作用域范围只在当前语句块
    

    跳转语句goto,break,continue

    • 三个语法都可以配合标签使用
    • 标签名区分大小写,如果不使用也会造成编译错误
    • break和continue配合标签可用于多层循环的跳出
    • goto是调整执行位置,与其它两个语句配合标签的结果并不相同
    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    LABEL1:
    	for {
    		for i := 0; i < 10; i++ {
    			fmt.Println(i)
    			if i > 3 {
    				fmt.Println(i)
    				break LABEL1 //这里使用标签的话,就可以一次性跳出循环
    			}
    		}
    	}
    	fmt.Println("OK")
    }
    
    
    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    
    	for {
    		for i := 0; i < 10; i++ {
    			fmt.Println(i)
    			if i > 3 {
    				fmt.Println(i)
    				goto LABEL1 //这里如果使用goto语句的话,建议标签放在goto语句之后,如果放在goto语句之前的话,会造成死循环
    			}
    		}
    	}
    LABEL1:
    	fmt.Println("OK")
    }
    
    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    LABEL1:
    	for i := 0; i < 10; i++ {
    		fmt.Println(i)
    		if i > 3 {
    			fmt.Println(i)
    			continue LABEL1//跳过这次循环,continue下面的语句不会被执行
    		}
    	}
    
    	fmt.Println("OK")
    }
    
    
  • 相关阅读:
    03-spring bean
    04-spring的依赖注入
    01-课程安排
    17-注解开发
    WIN10新机必要设置记录 for 3dsmax
    ps导出svg
    VS C# 共享项目
    在Maxscript中创建.Net类型
    C# 自定义索引
    C# ?
  • 原文地址:https://www.cnblogs.com/skymyyang/p/7601435.html
Copyright © 2011-2022 走看看