Go流程控制
流程控制
程序的流程控制结构一共有三种:顺序结构,选择结构,循环结构
顺序结构:从上到下,逐行执行。默认的逻辑
选择结构:条件满足某些代码才会执行
- if
- switch
- select ,后面channel再讲
循环结构:条件满足某些代码会被反复执行0-N次.
- for
if语句
条件语句需要开发者通过指定一个或多个条件,并通过测试条件是否为true来决定是否执行指定语句,并在条件为false的情况在执行另外的语句
下图展示了程序条件语句的结构

if条件语句
package main
import "fmt"
func main() {
   var a int = 15
   if a > 20 {
      fmt.Println("a>20")
   }
   if a > 10 {
      fmt.Println("a>10")
   }
    //输出结果:a>10
}
if else 语句
package main
import "fmt"
func main() {
    //定义一个分数为90
   var score int
   fmt.Println("请输入一个数:")
   fmt.Scan(&score)
   //设置score>=90 优秀
   //   score>=60 良好
   //   score <60 不及格
   if score >= 90 {
      fmt.Println("优秀")
   } else if score >= 60 {
      fmt.Println("良好")
   } else {
      fmt.Println("不及格")
   }
}

if嵌套语句
package main
import "fmt"
// if嵌套
func main() {
	//	验证密码
	var x, y, pwd int
	pwd = 20221112
	fmt.Print("请输入密码:")
	fmt.Scanln(&x)
	if x == pwd {
		fmt.Print("请再次输出密码:")
		fmt.Scanln(&y)
		if y == pwd {
			fmt.Println("密码验证成功")
		}
	} else {
		fmt.Println("密码验证失败")
	}
}

switch语句
switch语句用于基于不同条件执行不同动作,每一个case分支都是唯一的,从上至下逐一测试,直到匹配为止。
switch语句执行的过程从上至下,直到找到匹配项,匹配项后面也不需要再加break。switch 默认情况下case最后自带 break语句
示例一:
package main
import "fmt"
func main() {
   var score int = 66
   switch score {
   case 90:
      fmt.Println("A")
   case 80:
      fmt.Println("B")
   case 70, 60, 50:
      fmt.Println("C")
   // 当所有条件不满足时,执行default语句
   default:
      fmt.Println("D")
   }
//打印输出结果:D
}
这里也可以按照条件输入判断
示例二:
package main
import "fmt"
func main() {
   var score int
   fmt.Printf("请输入一个数:")
   fmt.Scan(&score)
   switch {
   case score >= 90:
      fmt.Println("您的成绩为优秀")
   case score >= 60 && score < 90:
      fmt.Println("您的成绩为良好")
   case score < 60 && score > 0:
      fmt.Println("您的成绩为不及格")
 //	当所有条件不满足时,执行default语句
   default:
      fmt.Println("查询不到您的成绩")
   }
}

fallthrough 贯穿;直通
switch默认情况下匹配成功后就不会执行其他case,如果我们需要执行后面的case,可以使用fallthrough穿透case使用fallthrough 会强制执行后面的case语句,fallthrough 不会判断下一条case的表达式结果是否为true。
当进行匹配选择机制后就不会执行后面的语句

如果想要无视任何条件直接执行下一条的语句就可以使用fallthrough
package main
import "fmt"
func main() {
   var a bool = false
   switch a {
   case false:
      fmt.Println("1,case条件为false")
      fallthrough
   case true:
      fmt.Println("2,case条件为true")
   }
}

暴力穿透很容易影响我们的程序,我们可以使用break进行终止
package main
import "fmt"
func main() {
   var a bool = false
   switch a {
   case false:
      fmt.Println("1,case条件为false")
      fallthrough
   case true:
      if a == false {
         break //终止穿透
      }
      fmt.Println("2,case条件为true")
   }
    //输出结果:1,case条件为false
}
for语句
在不少实际问题中有许多具有规律性的重复操作,因此在程序中就需要重复执行某些语句。
for循环是一个循环控制结构,可以执行指定次数的循环。
package main
import "fmt"
func main() {
   // for 条件的起始值; 循环条件; 控制变量自增或者自减
   // 无限循环
   //i := 1
   //for {
   // fmt.Println(i)
   // i++
   //}
   //计算1到10的数字和
   sum := 0
   for i := 1; i <= 10; i++ {
      sum += i
   }
   fmt.Println(sum)
}
练习一
package main
import "fmt"
/* 打印一个方阵
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *
 */
func main() {
   for j := 0; j < 5; j++ {
      for i := 0; i < 5; i++ {
         fmt.Print("* ")
      }
      fmt.Println()
   }
}
练习二
package main
import "fmt"
func main() {
    //打印9列
   for j := 1; j <= 9; j++ {
      //打印9行 i <= j逐级递减
      for i := 1; i <= j; i++ {
         //Printf字符编排  一个%d对应一个值
         fmt.Printf("%d*%d=%d ", i, j, i*j)
      }
       //输出完每一行换行
      fmt.Println()
   }
}
break 结束当前整个循环
package main
import "fmt"
func main() {
   
   //break结束当前循环
   for i := 0; i < 9; i++ {
      if i == 5 {
         break
      }
      fmt.Println(i)
   }
   
}
continue 结束当次循环
package main
import "fmt"
func main() {
//continue 结束当次循环
   fmt.Println("=======================")
   for i := 0; i < 9; i++ {
      if i == 5 {
         continue
      }
      fmt.Println(i)
   }
}
String
什么是String
Go中的字符串是一个字节的切片,可以通过将其内容封装在""中来创建字符串,Go中的字符串Unicode兼容的,并且是UTF-8编码,字符串是一些字节的集合
package main
import "fmt"
func main() {
   str := "hello,xuexiangban"
   fmt.Println(str)
   //输出字符串的长度 len
   fmt.Println("字符串的长度:", len(str))
   // 获取指定的字节 但这里输出的是ascii值 h-104
   fmt.Println(str[0])
   fmt.Printf("获取指定的字节:%c\n", str[0])
   // 遍历字符串
   for i := 0; i < len(str); i++ {
      fmt.Printf("%c", str[i])
   }
   fmt.Println()
   // for range循环,遍历数组,切片
   for i, i2 := range str {
      fmt.Print(i)
      fmt.Printf("%c", i2)
   }
}


 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号