判断语句,循环语句,流程控制
Go语言条件判断语句
if – else 语句
语法格式:
if (布尔表达式){ //布尔值为true执行花括号内语句
语句1
}
else { //布尔值为false执行else内语句
语句2
}
package main
import "fmt"
func main() {
var A = 2
if (A == 10){ //2 != 10结果为false,执行else内的语句
fmt.Println("A = 10")
}else {
fmt.Println("A = ",A)
}
}
输出结果:
if嵌套语句
在 if
内添加if
语句,实现嵌套效果.
语法格式:
if (布尔表达式){
语句1
if(B == 4) {
语句1.1
}
}
package main
import "fmt"
func main() {
var B = 4
if (B > 2){ // 4 > 2 执行语句1
fmt.Println("B > 2") //语句1
if(B == 4) { //B = 4 ,执行语句1.1
fmt.Println("B = 4" ) //语句1.1
}
}
}
运行结果:
if-else if-if 语句
单纯是if else
是不够用的,所以Go语言还有else if
语句。可以搭配if
,else
使用
func main() {
var A = 10
if (A == 5){
fmt.Println("A = 5")
}else if (A == 10) {
fmt.Println("A = 10")
}else{
fmt.Println("A != 5 && A != 10")
}
}
输出结果:
switch语句
switch
用来执行不同条件的不同动作,switch
包含case
的分支,swicth
会从上到下一次判断各个case
分支。case
都是唯一的,而且自带一个break
效果,一旦执行一个case
就不会执行后面的case
,如果需要执行后面的case
,需要加 fallthrough
.
fallthrough
要放在要第一个执行的case
内
default
代表如果没有可执行的 case
,则会执行 default
下的语句。
case中值的数据类型必须和switch中的数据类型相同, 多个值也可以写在一个case中, 但要用逗号隔开
格式 :
switch Var {
case var1:
//语句1
case var2:
//语句2
default:
//语句3
}
package main
import "fmt"
func main() {
var A = 4
var B = 2
var C = A
var D = 4
switch C { //判断
case A:
fmt.Println("A = " , A)
fallthrough // D 和 A都为4,如果不加fallthrough只能执行A 的case
case B:
fmt.Println("B = " , B)
case D:
fmt.Println("D = " , D)
default:
fmt.Println("C = " , C)
}
}
输出结果:
Go语言条件循环语句
for关键字
在Go语言中去除了
while
,do - while
循环,变得更加简洁了。格式:
for 控制变量(赋值表达式); 循环条件(逻辑表达式\关系表达式);控制变量控制(自增\自减){
//语句
}
其中 控制变量控制 是可以选择性添加的,不添加就实现了while
循环
package main
import "fmt"
func main() {
var A = 0
for i := 0; i < 10; i++{
A = A + i
}
fmt.Println( "A = ",A)
}
运行结果:
for range 语句
for range
语句有着类似迭代器操作(遍历数组,字符串等),返回 (索引, 值) 或 (键, 值)
特点:
- 数组,切片返回格式为[索引,值]
- map返回 键和值
- 通道(channel)只返回通道(channel)内的值
格式:
for (索引名\键名),(值) := range (range的对象) {
//语句
}
字符串会转为ASCII码输出,如果需要显示字符 则需要 string()转为字符串类型
package main
import "fmt"
func main() {
var String = "ABCDEFG"
for index,value := range String{
//index:索引 , value:for range出来的值
fmt.Println("index:",index,",Value:",string(value),"ASCII:",value)
}
}
输出结果:
流程控制语句
Continue
跳过当前循环,进入下一循环
package main
import "fmt"
func main() {
for i := 0;i < 3;i++{
fmt.Println("i = = = ",i)
for n := 0;n < 5;n++{
if (n < 2){
continue
}
fmt.Println("n =",n)
}
}
}
输出结果:
Break
终止当前循环,或者跳出switch
语句
在多重循环中,可以用标号 label
标出想 break
的循环。
package main
import "fmt"
func main() {
for i := 0;i < 3;i++{
fmt.Println("i = = = ",i)
for n := 0;n < 5;n++{
if (n < 2){
break
}
fmt.Println("n =",n)
}
}
}
输出结果:
break + label 跳出指定循环
package main
import "fmt"
func main() {
label1:
for i := 0; i < 3; i++ {
for n := 0; n < 3; n++ {
break label1 //跳出最外层循环(label1)
fmt.Println("循环2")
}
fmt.Println("循环1")
fmt.Println("---------------")
}
}
输出结果:
Goto
无条件地转移到过程中指定的行。
格式 :
goto label;
..
.
label: statement;
使用Goto语句来跳出双层循环.
未使用Goto:
package main
import "fmt"
func main() {
for i := 0; i < 3; i++ {
for n := 0; n < 3; n++ {
fmt.Println("循环2")
//goto label
}
fmt.Println("循环1")
fmt.Println("---------------")
}
//label:
// fmt.Println("label")
}
输出结果,可见break只能跳出所在的循环,无法跳出双层循环。
使用Goto语句:
package main
import "fmt"
func main() {
for i := 0; i < 3; i++ {
for n := 0; n < 3; n++ {
fmt.Println("循环2")
goto label //跳到名为label的代码处
}
fmt.Println("循环1")
fmt.Println("---------------")
}
label:
fmt.Println("label")
}
输出结果: