Go流程控制

流程控制

程序的流程控制结构一共有三种:顺序结构,选择结构,循环结构

顺序结构:从上到下,逐行执行。默认的逻辑
选择结构:条件满足某些代码才会执行

  • if
  • switch
  • select ,后面channel再讲

循环结构:条件满足某些代码会被反复执行0-N次.

  • for

if语句

条件语句需要开发者通过指定一个或多个条件,并通过测试条件是否为true来决定是否执行指定语句,并在条件为false的情况在执行另外的语句

下图展示了程序条件语句的结构

image-20221112124207698

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("不及格")
   }
}

image-20221112130415789

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("密码验证失败")
	}
}


image-20221112132207987

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("查询不到您的成绩")
   }

}

image-20221112144912322

fallthrough 贯穿;直通

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

当进行匹配选择机制后就不会执行后面的语句

image-20221112150042437

如果想要无视任何条件直接执行下一条的语句就可以使用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")
   }
}

image-20221112150214925

暴力穿透很容易影响我们的程序,我们可以使用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)
   }
}

image-20221113105412659

posted @   落暮つ  阅读(142)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示