Go流程控制

本文详细介绍了Go语言中的流程控制结构,包括if条件判断(可以不配else)、switch案例分析(包括fallthrough和break的使用),以及for循环的各种形式,如基本循环、无限循环和带条件的循环。此外,还涵盖了位运算符(如按位与、按位或、按位异或等)和赋值运算符的使用。这些内容对于理解和编写Go语言的控制流和算术操作至关重要。
摘要由CSDN通过智能技术生成

流程控制

if 如果

  • if 可以单独存在,不一定要配 else
  • if … else
  • if … elseif … else if … else

判断:对和错

if 条件:bool{
    
}
package main

import "fmt"

func main() {
   var num int = 15
   // if 不满足则跳过该if里面的代码,程序不会执行
   if num > 100 {
      fmt.Println("num > 100")
   }
   // if的代码必须要条件满足才可以执行
   if num > 10 {
      fmt.Println("num > 10")
   }
   fmt.Println("main end")
}

结果:
在这里插入图片描述

如果 。。。 否则。。。

// 成绩
var score int = 90

// 满足一个条件,则进入对应的处理代码
if score == 100 {
   fmt.Println("满分")
} else { // 不满足就进入else
   fmt.Println("不及格")
}

结果:
在这里插入图片描述

if 小练习

package main

import "fmt"

// 命令行程序 go build xxx.go 生成可执行程序。
func main() {

   // 练习:if的练习

   // 判断用户密码输入是否正确

   // 输入框 : 接收用户的输入 (新知识)
   // 第一次判断
   // 输入框 :请再次输入密码  接收用户的输入 (新知识)
   // 第二次判断
   // 如果两次都是对的,那么则登录成功

   //
   var num1 int
   var num2 int

   // 提示用户输入
   fmt.Printf("请输入密码 : \n")
   // 接收用户的输入 (阻塞式等待... 直到用户输入之后才继续运行)最简单的人机交互
   // Scan()  &num1地址,
   fmt.Scan(&num1) // 等待你的输入,卡住... 如果你输入完毕,回车。输入内容就会赋值给num
   // 123456 模拟数据,未来是在数据库中查询出来的。根据用户查的
   if num1 == 123456 {
      fmt.Println("请再次输入密码: ")
      fmt.Scan(&num2)
      if num2 == 123456 {
         fmt.Println("登录成功")
      } else {
         fmt.Println("登录失败")
      }
   } else {
      fmt.Println("登录失败")
   }

}

结果:
在这里插入图片描述
在这里插入图片描述

多个条件的判断

package main

import "fmt"

func main() {

   // 分数
   var score int
   fmt.Println("请输入你的成绩:")
   fmt.Scan(&score)
   // 逻辑运算符应用   90<=score<=100 不能这样写的
   if score >= 90 && score <= 100 {
      fmt.Println("A")
   } else if score >= 80 && score < 90 {
      fmt.Println("B")
   } else if score >= 70 && score < 80 {
      fmt.Println("C")
   } else if score >= 60 && score < 70 {
      fmt.Println("D")
   } else if score < 0 || score > 100 { // 健壮性判断
      fmt.Println("输入不合法")
   } else { // else 如果以上的条件都不满足,则执行 else
      fmt.Println("不及格")
   }

}

结果:
在这里插入图片描述

switch

if var == 1{
    
}else if var == 2{
    
}else if var == 3{
    
}else{
    
}
// 匹配机制 var1 ,根据下面的case结果来进行校验,满足则执行,不满足 default
switch var1 {
	case val1:
	
    case val2:

    default:
    
}

switch的基本使用

package main

import "fmt"

func main() {

   var score int = 100

   // 通过switch来判断score
   // case , 后面可以写多个条件
   switch score {
   case 100, 95, 91:
      fmt.Println("A")
   case 90:
      fmt.Println("B")
   case 80, 70, 60:
      fmt.Println("C")
   default:
      fmt.Println("other")
   }

   // switch 是可以省略条件的,默认是 switch true
   switch{
   case false:
      fmt.Println("false")
   case true:
      fmt.Println("true")
   default:
      fmt.Println("其他")
   }

   //var flag bool
   //switch flag {
   //case score<100 :
   //
   //}
}

特殊的情况:需要多个条件结果的输出,case穿透 。fallthrough

package main

import "fmt"

func main() {

   a := false

   // 这里的爆红不影响
   switch a {
   case false:
      fmt.Println("1") // 默认只会输出1
      fallthrough      // 在case中 一旦使用了 fallthrough,则会强制执行下一个case语句
   case true:
      fmt.Println("2")
   case false:
      fmt.Println("3")
   case true:
      fmt.Println("4")
   case false:
      fmt.Println("5")
   default:
      fmt.Println("6")
   }

}

退出case穿透

package main

import "fmt"

func main() {

	a := false

	// 这里的爆红不影响  if{....}
	switch a {
	case false: // 基本业务代码
		fmt.Println("1") // 业务代码
		fallthrough      // 在case中 一旦使用了 fallthrough,则会强制执行下一个case语句,不会去判断条件的
	case true: // 善后代码
		fmt.Println("2")
		fallthrough
	case false:
		fmt.Println("3")
		fallthrough
	case true:
		// 判断了一些错误... 跳出终止这个case
		if a == false {
			break
		}
		fmt.Println("4")
		fallthrough
	case false:
		fmt.Println("5")
		fallthrough
	default:
		fmt.Println("6")
	}

	// 如果满足,则返回基本查询结果,和一个状态结果
	// name  success 用户信息  ok 200... 状态码结果.. 其他东西

}

分支结构小结

  • if

  • if … else if

  • if … else

  • if … else if … else if … else if… else

  • swtich - case

  • swtich - case - fallthrough

  • swtich - case - default

for循环的探究

package main

import "fmt"

// 探究for循环   init:起始值  end:结束值  condition:条件变量
func main() {
   i := 0
   // for 循环可以直接
   // 在 for循环中定义的变量,作用域就只在 for循环内,外面是无法调用的
   // for + 结束for条件就可以跑起来
   for i <= 5 {
      i++
   }
   fmt.Println(i)
}
package main

import (
	"fmt"
)

// 探究for循环   init:起始值  end:结束值  condition:条件变量
func main() {
	// 没有起始值、没有结束...  无限循环,死循环, 不要在开发中写这种代码。会内存溢出
	for {
		fmt.Println("hello,world")
	}
}

终止循环

break : 结束整个循环,立即停止

continue :结束当前这次循环,继续进行下一次循环

package main

import "fmt"

func main() {

   for i := 1; i <= 10; i++ {
      if i == 5 {
         //break
         continue // 到这里就结束了当次循环,不会向下了,继续从头开始
      }
      fmt.Println(i)
   }

}

练习:

package main

import "fmt"

/*
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *
 */
func main() {
   // for循环的嵌套
   for i := 1; i <= 5; i++ {
      for j := 0; j < 5; j++ {
         fmt.Print("* ")
      }
      fmt.Println()
   }
}

打印 99 乘法表

package main

import "fmt"

	for i := 1; i < 10; i++ {
		for j := 1; j <= i; j++ {
			fmt.Printf("%d*%d=%d\t", j, i, j*i)
		}
		fmt.Println("")
	}

打印菱形

package main

import "fmt"
func main() {

	for i := 1; i <= 6; i++ {
		//打印空格
		for j := 1; j <= 6-i; j++ {
			fmt.Print(" ")
		}
		//实现三角形
		for j := 0; j < 2*i-1; j++ {
			fmt.Print("*")
		}
		fmt.Println()
	}
	for i := 5; i >= 1; i-- {
		for j := 0; j < 6-i; j++ {
			fmt.Print(" ")
		}
		for j := 0; j < 2*i-1; j++ {
			fmt.Print("*")
		}
		fmt.Println()

	}
}

符号

位运算符

(数的二进制来进行计算的,加密解密,一些特殊的高效运算)

Go 语言支持的位运算符如下表所示。假定 A 为60,B 为13:

运算符描述实例
&按位与运算符"&"是双目运算符。都是1结果为1,否则是0(A & B) 结果为 12, 二进制为 0000 1100
|按位或运算符"|"是双目运算符。 都是0结果为0,否是是1(A | B) 结果为 61, 二进制为 0011 1101
^按位异或运算符"^"是双目运算符。 不同则为1,相同为0(A ^ B) 结果为 49, 二进制为 0011 0001
&^位清空,a &^ b,对于b上的每个数值,如果为0,则取a对应位上的数值,如果为1,则取0.(A &^ B) 结果为 48, 二进制为 0011 0000
<<左移运算符"<<“是双目运算符。左移n位就是乘以2的n次方。 其功能把”<<“左边的运算数的各二进位全部左移若干位,由”<<"右边的数指定移动的位数,高位丢弃,低位补0。A << 2 结果为 240 ,二进制为 1111 0000
>>右移运算符">>“是双目运算符。右移n位就是除以2的n次方。 其功能是把”>>“左边的运算数的各二进位全部右移若干位,”>>"右边的数指定移动的位数。A >> 2 结果为 15 ,二进制为 0000 1111
package main

import "fmt"

// 位运算符(二进制相关的,只需要作为了解) 假定 A 为60,B 为13
// A 60   0011 1100
// B 13   0000 1101
func main() {
   // 0 false 1 true
   var a int = 60
   var b int = 13
   // & 按位与 两个都是真,结果为真
   // 0011 1100
   // 0000 1101
   // ---------
   // 0000 1100
   fmt.Println(a & b) // 60&13 = 12 (二进制转换为10进制的结果)

   // | 按位或 如果都是假的结果才为假0,如果有一个1则为1
   // 0011 1100
   // 0000 1101
   // ---------
   // 0011 1101
   fmt.Println(a | b) // 61

   // ^ 按位异或, 不同则为1.相同就为0
   // 0011 1100
   // 0000 1101
   // ---------
   // 0011 0001
   fmt.Println(a ^ b) // 49

   // &^ 位清空,对于b上的每个数值,如果为0,则取a对应位上的数值;如果为1,则取0.
   // 0011 1100
   // 0000 1101
   // ---------
   // 0011 0000
   fmt.Println(a &^ b) // 48

   // 左移 << n 、右移 >> n 移动的位数
   // 移动完毕后,需要补位(左移补右边,相反一样)
   // 1111 0000
   // 60 -> 240
   fmt.Println(a << 2) // 240

   //     0000 1111
   fmt.Println(a >> 2) // 15
}

赋值运算符

下表列出了所有Go语言的赋值运算符。

运算符描述实例
=简单的赋值运算符,将一个表达式的值赋给一个左值C = A + B 将 A + B 表达式结果赋值给 C
+=相加后再赋值C += A 等于 C = C + A
-=相减后再赋值C -= A 等于 C = C - A
*=相乘后再赋值C *= A 等于 C = C * A
/=相除后再赋值C /= A 等于 C = C / A
%=求余后再赋值C %= A 等于 C = C % A
<<=左移后赋值C <<= 2 等于 C = C << 2
>>=右移后赋值C >>= 2 等于 C = C >> 2
&=按位与后赋值C &= 2 等于 C = C & 2
^=按位异或后赋值C ^= 2 等于 C = C ^ 2
|=按位或后赋值C |= 2 等于 C = C | 2
package main

import "fmt"

// 赋值运算符
func main() {
   // = 赋值
   var a int = 1
   var c int // 0
   // a = a + b (语法糖)
   c += a  // c = c + a
   fmt.Println(c)
   c -= a  // c = c - a
   c *= a  // c = c * a
   c /= a  // c = c / a
   
   // c = c + a
   // c += a
}

其他运算符

下表列出了Go语言的其他运算符。

运算符描述实例
&返回变量存储地址&a; 将给出变量的实际地址。
*指针变量。*a; 是一个指针变量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值