Go 运算符

3 运算符

Go 内置运算符:

  • 算术运算符
  • 关系运算符
  • 逻辑运算符
  • 位运算符
  • 赋值运算符

算术运算符

运算符
+相加
-相减
*相乘
/相除
%求余

注意:++--是Go中单独的语句,而非运算符

关系运算符

运算符描述
==是否相等
!=是否不相等
>左边值是否大于右边值
>=左边值是否大于等于右边值
<左边值是否小于右边值
<=左边值是否小于等于右边值

逻辑运算符

运算符描述
&&逻辑AND运算符
||逻辑OR运算符
逻辑NOT运算符

位运算符

  • 位运算符 对整数在内存中的二进制位 进行操作
运算符描述
&参与运算的两数各对应的二进制位 相与(两位均为1 才为1)
|参与运算的两数各对应的二进制位 相或(两位有一个为1 就为1)
^参与运算的两数各对应的二进制位 相异或(两位相异 则为1)
<<左移n位,即乘以2^n
>>右移n位,即除以2^n

赋值运算符

运算符描述
=将表达式的值赋给一个左值
+=相加后在赋值
-=
*=
/=
%=
<<=左移后赋值
>>=右移后赋值
&=按位与后赋值
|=按位或后赋值
^=按位异或后赋值

练习题

  • 有一堆数字,如果除了一个数字以外,其他数字都出现了两次,那么如何找到出现一次的数字?

  • 目前能想到的是暴力遍历:
    *

4 流程控制

  • 流程控制是每种语言控制逻辑走向和执行次序的重要部分
  • Go 中有iffor, 而switchgoto主要是为了简化代码、降低重复代码而生,属于扩展类的流程控制

if else分支结构

if 条件判断的基本写法
  • if 条件判断格式

    • if expr1{
          block1
      }else if expr2{
          block2
      }else {
          block3
      }
      
    • ==注意:==Go 规定,if左括号必须与if expr放于同一行;右括号必须与下一个语句在同一行

if 条件判断特殊写法
  • 可以在 if 表达式前添加一个执行语句,再根据变量值判断

    • 示例:

    • package main
      
      import "fmt"
      
      func main() {
      
      	if score := 65; score >= 90 {
      		fmt.Println("A")
      	} else if score > 75 {
      		fmt.Println("B")
      	} else {
      		fmt.Println("C")
      	}
      }
      
      
  • 思考:区别可能就是作用域不同

for 循环结构

  • Go 语言中的所有循环类型都可以使用关键字 for 完成

  • 基本格式:

    for 初始语句; 循环条件表达式; 结束语句{
    	循环体
    } 
    
  • 循环条件表达式true 时进行循环,直到为false

  • for 循环的 初始语句 可以被省略,但是分号必须要写

    • for ;i<10;i++
  • for 循环的初始语句和结束语句都可以被省略, 此时不需要分号

    • 类似于C中的关键词while
    • for i<10
无限循环
  • for {
    	循环体
    }
    
  • 可以通过关键字break goto return panic强制退出循环

for range 键值循环

  • 可以使用 for range 遍历 数组、切片、字符串、map以及通道
    • 数组、切片、字符串 返回 索引
    • map 返回
    • 通道 只返回通道内的值

switch case

  • 对大量值进行条件判断

    • i := 1
      switch(i){
      	case 1:
      		block1
      	case 2:
      		block2
      	default :
      		block3
      }
      
  • Go 规定,只能有一个default分支

  • 一个分支可以有多个值,多个case值使用逗号分开

  • case 1, 3, 5:

  • 分支可以使用表达式判断:

    • case age<25:
  • fallthrough语法可以执行满足条件的 case 的下一个 case,为了兼容 C 中的case

    • func switchDemo5() {
       	s := "a"
       	switch {
       	case s == "a":
       		fmt.Println("a")
       		fallthrough
       	case s == "b":
       		fmt.Println("b")
       	case s == "c":
       		fmt.Println("c")
       	default:
       		fmt.Println("...")
       	}
      }
      
    • a
      b
      

goto 跳转到指定标签

  • goto通过标签进行代码间的无条件跳转
  • 可以在快速跳出循环、避免重复退出上有一定的帮助
    *
func gotoDemo2() {
	for i := 0; i < 10; i++ {
		for j := 0; j < 10; j++ {
			if j == 2 {
				// 设置退出标签
				goto breakTag
			}
			fmt.Printf("%v-%v\n", i, j)
		}
	}
	return
	// 标签
breakTag:
	fmt.Println("结束for循环")
}

break 跳出循环

  • 结束forswitchselect 的代码块

  • 可以在break语句后面添加标签:退出某个标签对应的代码块

    • 标签必须定义在对应的forswitchselect 的代码块上

      • func breakDemo1() {
        BREAKDEMO1:
        	for i := 0; i < 10; i++ {
        		for j := 0; j < 10; j++ {
        			if j == 2 {
        				break BREAKDEMO1
        			}
        			fmt.Printf("%v-%v\n", i, j)
        		}
        	}
        	fmt.Println("...")
        }
        

continue 继续下次循环

  • continue 语句: 结束当前循环,开始下一次循环,仅限在for循环内使用

  • continue 语句后添加标签时,表示开始标签对应的循环

    • func continueDemo() {
      forloop1:
      	for i := 0; i < 5; i++ {
      		// forloop2:
      		for j := 0; j < 5; j++ {
      			if i == 2 && j == 2 {
      				continue forloop1
      			}
      			fmt.Printf("%v-%v\n", i, j)
      		}
      	}
      }
      

练习题

  • 编写代码打印 99 乘法表

    • package main
      
      import "fmt"
      
      func main() {
      	for i := 1; i <= 10; i++ {
      		for j := 1; j <= 10; j++ {
      			fmt.Printf("%d * %d = %d ", i, j, i*j)
      		}
      		fmt.Println()
      	}
      }
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值