go-控制语句

指针

Go虽然保留了指针,但与其他编程语言不同的是,在Go当中不支持指针运算以及“->” 运算符,而直接采用“ .”选择符来操作指针目标对象的成员

  • 操作符“&”取变量地址,使用“*”通过指针间接访问目标对象
  • 默认值为nil而且NULL
package main

import (
	"fmt"
)

func main()  {
	a := 1
	var p *int = &a
	fmt.Println(*p)   //通过指针访问对象
} 

 递增递减语句

在Go当中,++与--是作为语句而并不是作为表达式

package main

import (
	"fmt"
)

func main()  {
	a := 1
	a ++   //++作为语句
	var p *int = &a
	fmt.Println(*p)   //通过指针访问对象
}  

 判断语句if

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

      

 

package main

import (
	"fmt"
)

func main()  {
	a := 10
	if a := 1; a > 0 {
		fmt.Println("a大于1")
	}
	fmt.Println(a)    //10,if语句中初始化定义的变量只在if作用域内存在
}

 循环语句for

  • Go只有for一个循环语句关键字,但支持3种形式
  • 初始化和步进表达式可以是多个值
  • 条件语句每次循环都会被重新检查,因此不建议在条件语句中使用函数,尽量条件计算好天剑并以变量或常量代替
  • 左大括号必须和条件语句在同一行

                  

 

//第一种for循环形式
package main

import (
	"fmt"
)

func main()  {
	a := 1
	for {
		a ++
		if a >3{
			break
		}
		fmt.Println(a)
	}
	fmt.Println("over")
}


//for 第二种形式
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语句
  • 支持一个初始化表达式(可以是并行方式),右侧需跟分号
  • 左大括号必须和条件语句在同一行

                    

 

//switch第一种形式
package main

import (
	"fmt"
)

func main()  {
	a := 1
	switch a {
	case 0:
		fmt.Println("a=0")
	case 1:
		fmt.Println("a=1")
	default:
		fmt.Println("None")
	}
}

//switch第二种形式
package main

import (
	"fmt"
)

func main()  {
	a := 1
	switch  {
	case a >= 0:
		fmt.Println("a=0")
		fallthrough   //符合这个case之后还会检查下一个case,不会立即退出
	case a >= 1:
		fmt.Println("a=1")
	default:
		fmt.Println("None")
	}
}


//switch第三种形式
package main

import (
	"fmt"
)

func main()  {
	switch a := 1; {
	case a >= 0:
		fmt.Println("a=0")
		fallthrough   //符合这个case之后还会检查下一个case,不会立即退出
	case a >= 1:package main

		import (
		"fmt"
		)

		func main()  {
	a := 1
	switch  {
	case a >= 0:
	fmt.Println("a=0")
	fallthrough   //符合这个case之后还会检查下一个case,不会立即退出
	case a >= 1:
	fmt.Println("a=1")
	default:
	fmt.Println("None")
	}
	}
		fmt.Println("a=1")
	default:
		fmt.Println("None")
	}
	fmt.Println(a)   //error,switch初始化变量只在该语块内有效
}

 跳转语句goto,break,continue

  • 三个语法都可以配合标签使用
  • 标签名区分大小写,若不使用会造成编译错误
  • Break与continue配合标签可用于多层循环的跳出
  • goto是调整执行位置,与其他两个语句配合标签的结果并不相同 

               

 

//标签
package main

import (
	"fmt"
)

func main()  {
LABEL1:    //定义一个标签
	for {
		for i := 0;i < 10;i++{
			if i > 3 {
				fmt.Println(i)
				break LABEL1    //label跟for同级,break直接跳出label1同级
			}
		}
	}
	fmt.Println("over")
}

//goto
package main

import (
	"fmt"
)

func main()  {
LABEL1:    //定义一个标签
	for {
		for i := 0;i < 10;i++{
			if i > 3 {
				fmt.Println(i)
				goto LABEL1  //调整到label1位置,无限循环,如果将label放到下面可跳出无限循环
			}
		}
	}
	fmt.Println("over")
}

//continue
package main

import (
	"fmt"
)

func main()  {
LABEL1:    //定义一个标签
	for i := 0;i < 10;i++{
		for {
				fmt.Println(i)
				continue LABEL1  //结束当前次循环,立即进入下次循环
		}
	}
	fmt.Println("over")
}

  

 

posted @ 2017-08-27 22:41  amchen  阅读(181)  评论(0编辑  收藏  举报