分支
if
if 布尔表达式 {
/* 在布尔表达式为 true 时执行 */
}
if 中可以直接定义变量
代码
age := 0 _, _ = fmt.Scanln(&age) if age > 18{ fmt.Println("对自己负责") } if s:="呀";age>18{ fmt.Println("对自己负责",s) }
if...else
if 布尔表达式 {
/* 在布尔表达式为 true 时执行 */
} else {
/* 在布尔表达式为 false 时执行 */
}
注意:else不能换行,必须在}后
代码
_, _ = fmt.Scanln(&age) if age > 18{ fmt.Println("对自己负责") } else { fmt.Println("年龄不大,放过你了") }
if..else if ...else
if 布尔表达式 {
/* 在布尔表达式为 true 时执行 */
} else if 布尔表达式{
/* 在布尔表达式为 true 时执行 */
} else {
/* 上述分支不满足时执行 */
}
else if 可以有多个,else可以没有
代码
if age < 18 { fmt.Println("小孩纸~") } else if age >= 18 && age < 40{ fmt.Println("青壮年~") }else{ fmt.Println("不惑") }
switch
switch [表达式] {
case val1[,...]:
...
case val2[,val3,...]:
...
default:
...
}
不需要break
val1 和 val2如果是常量,不能相同,val2和val3可以是同类型的任意值,也不能相同,变量的话没问题
为了实现其他语言,例如c++,不加break时,多case,一个结果的情况,一个case后可以加多个
表达式的结果类型要与case的一致,当然case也可以是变量、函数的返回值等
switch后可以定义变量,加分号结束(不推荐)
day := "" _, _ = fmt.Scanln(&day) switch day{ case "1":fmt.Println("星期一") case "2":fmt.Println("星期二") case "6","7":fmt.Println("周末") default: fmt.Println("懒得写了") }
switch穿透
使用关键字fallthrough,会强制执行下一个case,不做判断。不建议,就不举例了。
type-switch
类型断言的时候再举例。
循环
for
or 开始条件;继续条件;循环体后执行语句{
循环体...
}
代码
str := "lady_killer9" for i:=0;i< len(str);i++{ fmt.Printf("%c",str[i]) }
注意:开始条件、继续条件、循环体后执行语句 都是可以省略的,当开始条件及循环体后执行语句都省略时,两个分号也可以省略
for 继续条件{
循环体...
}
for-range
for key,value := range 变量{
循环体...
}
注意:循环体用不到key时,可以使用匿名变量接收
代码
for index,val := range str{ fmt.Println(index,string(val)) }
Go中是没有while和do..while的,可以自己实现类型的逻辑。
实现while
for{
if condition{
break
}
do something;
}
代码
i := 0 for{ if i == len(str){ break } fmt.Printf("%c",str[i]) i++ }
换一种方式
i = 0 for i!=len(str){ fmt.Printf("%c",str[i]) i++ } fmt.Println()
实现do...while
for{
do something;
if condition{
break
}
}
代码
j := 0 for{ fmt.Printf("%c",str[j]) j++ if j == len(str){ break } }
break
break可以指明跳出到哪一层使用标签,,默认是本层循环。
label:
for {
for{
...
break label
}
}
代码
arr := [2][2]int{{1,2},{3,4}} loop: for i:=0;i<len(arr);i++{ for j:=0;j<len(arr[0]);j++{ fmt.Println(arr[i][j]) if arr[i][j] == 2{ break loop } } }
continue
同上,可加label
代码
arr := [2][2]int{{1,2},{3,4}} loop: for i:=0;i<len(arr);i++{ for j:=0;j<len(arr[0]);j++{ fmt.Println(arr[i][j]) if arr[i][j] == 2{ break loop } } }
continue
同上,可加label
代码
loop2: for i:=0;i<len(arr);i++{ for j:=0;j<len(arr[0]);j++{ fmt.Println(arr[i][j]) if arr[i][j] == 1{ continue loop2 } } }
goto
直接跳到某个标签处,不推荐
for i:=0;i<len(arr);i++{ for j:=0;j<len(arr[0]);j++{ fmt.Println(arr[i][j]) if arr[i][j] == 2{ goto HI } } } HI: fmt.Println("hi, goto")
全部代码
分支
case.go
package main import "fmt" func main() { //--------------for--------------- str := "lady_killer9" for i:=0;i< len(str);i++{ fmt.Printf("%c",str[i]) } fmt.Println() //-----------for range------------ for index,val := range str{ fmt.Println(index,string(val)) } //-----------实现while----------- i := 0 for{ if i == len(str){ break } fmt.Printf("%c",str[i]) i++ } fmt.Println() //-----------实现do...while...-------- j := 0 for{ fmt.Printf("%c",str[j]) j++ if j == len(str){ break } } fmt.Println() //------------label break------------ fmt.Println("------------label break------------") arr := [2][2]int{{1,2},{3,4}} loop: for i:=0;i<len(arr);i++{ for j:=0;j<len(arr[0]);j++{ fmt.Println(arr[i][j]) if arr[i][j] == 2{ break loop } } } //------------label continue------------- fmt.Println("------------label continue-------------") loop2: for i:=0;i<len(arr);i++{ for j:=0;j<len(arr[0]);j++{ fmt.Println(arr[i][j]) if arr[i][j] == 1{ continue loop2 } } } //----------label goto------------------- fmt.Println("----------label goto-------------------") for i:=0;i<len(arr);i++{ for j:=0;j<len(arr[0]);j++{ fmt.Println(arr[i][j]) if arr[i][j] == 2{ goto HI } } } HI: fmt.Println("hi, goto") }
循环
for.go
package main import "fmt" func main() { //--------------for--------------- str := "lady_killer9" for i:=0;i< len(str);i++{ fmt.Printf("%c",str[i]) } fmt.Println() //-----------for range------------ for index,val := range str{ fmt.Println(index,string(val)) } //-----------实现while----------- i := 0 for{ if i == len(str){ break } fmt.Printf("%c",str[i]) i++ } fmt.Println() i = 0 for i!=len(str){ fmt.Printf("%c",str[i]) i++ } fmt.Println() //-----------实现do...while...-------- j := 0 for{ fmt.Printf("%c",str[j]) j++ if j == len(str){ break } } fmt.Println() //------------label break------------ fmt.Println("------------label break------------") arr := [2][2]int{{1,2},{3,4}} loop: for i:=0;i<len(arr);i++{ for j:=0;j<len(arr[0]);j++{ fmt.Println(arr[i][j]) if arr[i][j] == 2{ break loop } } } //------------label continue------------- fmt.Println("------------label continue-------------") loop2: for i:=0;i<len(arr);i++{ for j:=0;j<len(arr[0]);j++{ fmt.Println(arr[i][j]) if arr[i][j] == 1{ continue loop2 } } } //----------label goto------------------- fmt.Println("----------label goto-------------------") for i:=0;i<len(arr);i++{ for j:=0;j<len(arr[0]);j++{ fmt.Println(arr[i][j]) if arr[i][j] == 2{ goto HI } } } HI: fmt.Println("hi, goto") }
截图
分支
循环
更多Go相关内容:Go-Golang学习总结笔记
有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。