一、if-else条件判断语句
- Go中的if-else条件判断语句跟C++差不多。但是需要注意的是,Go中强制规定,关键字if和else之后的左边的花括号"{“必须和关键字在同一行,若使用了else if结构,则前段代码快的右花括号”}"必须和关键字else if在同一行。
- Go和C++不同的是,条件判断语句不需要小括号"()"括起来
package main
import "fmt"
func main() {
	var num int = 100
	if num == 0{//{必须同一行
		fmt.Println("aaaaaa")
	}else if num == 10{//必须同一行
		fmt.Println("bbbbbb")
	}else if num == 100{
		fmt.Println("cccccc")
	}else{
		fmt.Println("eeeeeeee")
	}
}
- 与C++不同的特殊写法,num:=10是一个语句,执行完之后,num==0才是判断表达式package main import "fmt" func main() { if num:=10; num==0 { //{必须同一行 fmt.Println("aaaaaa") } }
二、switch-case语句
- 与C++不同的是,在Go语言中,case是一个独立的代码块,执行完毕后并不会紧接着执行下一个case,所以不需要执行完一个case之后break;但是为了兼容一些移植代码,依然加入了fallthough关键字来实现执行完case语句之后紧接着执行下一个case语句。
package main
import (
	"fmt"
)
func main() {
	s := "hello"
	i := 15
	switch {
	case s == "hello":
		fmt.Println("hello")
		fallthrough
	case s == "world":
		fmt.Println("world")
		fallthrough//强行执行下个case语句
	case i >= 15 && i < 20://分支可以用表达式
		fmt.Println("!!!!呀呀呀")
	default:
		fmt.Println("bbbbb")
	}
	str2 := "math"
	switch  str2{
	case "hhhh","math"://一个分支可以对应多个值
		fmt.Println("math")
		fallthrough
	case "aaaaa":
		fmt.Println("math222")
	case "cccc":
		fmt.Println("math333333")
		fallthrough
	default:
		fmt.Println("qqqqqqq")
	}
}
结果:
三、for循环语句
-  与C++不同,Go语言中的循环语句只支持for关键字,并不支持while和do-while结构 
-  例子: package main import "fmt" func main() { for i:= 0; i < 10; i++{ fmt.Printf(" %d ",i) } }结果:  
-  for的初始语句可以被忽略 
-  for的条件表达式也可以被忽略 
-  for只有一个条件的循环 package main import "fmt" func main() { //1.忽略for的初始语句 i := 0 for ; i<10 ; i++{ fmt.Printf(" %d ",i) } fmt.Println() //2.忽略for的条件表达式 for j:=0; ;j++{ if j > 10{ break } fmt.Printf(" %d ",j) } fmt.Println() //3.for忽略第三条语句 for j:=0;j<10; { fmt.Printf(" %d ",j) j++ } fmt.Println() //4.for只有一个条件的循环 var k int=0 for k <= 10{ fmt.Printf(" %d ",k) k++ } }结果:  
-  for也可以无限循环 package main import "fmt" func main() { //4.for实现无限循环 for ; ; { fmt.Printf("aaa") } }
四、goto/break/continue跳出循环
1.goto
- goto关键字是跳出多层循环,跳转到循环外面,执行标签内的语句
package main
import "fmt"
func main() {
	for i:=0; i<10; i++{
		for j:=0; j<10; j++{
			fmt.Printf(" i:%d ", i)
			fmt.Printf(" j:%d ", j)
			if j==3{
				goto goHereLa //跳出循环,跳转到标签语句
			}
		}
	}
	
	fmt.Println("\n不会到这噢,直接跳过,去goHereLa标签内")//不会打印
	return //手动返回,避免函数执行进入了标签代码中
goHereLa:
	fmt.Println("\nthere le la la la,到这啦")
}
结果:
2.break
- break和goto一样,可以跟上标签,但是表示退出某个标签对应的代码块,标签要求必须定义在对应for, switch和select代码块上方
package main
import "fmt"
func main() {
goHereLa:
	for i:=0; i<10; i++{
		for j:=0; j<10; j++{
			fmt.Printf(" i:%d ", i)
			fmt.Printf(" j:%d ", j)
			if j==3{
				break goHereLa //跳出标签goHereLa里的代码块。即跳出循环外
			}
		}
	}
	fmt.Println("\n到这啦,循环语句外面")//会打印
}
结果:
 
3.continue
- Go中的continue和C++中并没有什么不一样,都是跳出本次循环继续下次循环。但是多加了一个功能,即也可以像break一样加上标签,表示开始标签对应的循环,并仅限于for循环中使用
package main
import "fmt"
func main() {
goHereLa:
	for i:=0; i<5; i++{
		fmt.Printf("\n i:%d ", i)
		for j:=0; j<10; j++{
			fmt.Printf(" j:%d ", j)
			if j==3{
				continue goHereLa //跳出标签goHereLa里的代码块。即跳出本次循环,继续下次循环
			}
			fmt.Println("当j是3之后不会打这个噢,直接跳出本次循环啦")
		}
	}
	fmt.Println("\n到这啦,循环语句外面")
}
结果:
 



















