一、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到这啦,循环语句外面")
}
结果: