本文介绍: 本篇学习Go第三课、运算符以及流程控制,详细内容包括:Go语言运算符1、算数运算符2、关系运算符3、逻辑运算符4、位运算符赋值运算符6、其他运算符7、运算符优先级二、Go流程控制1、if else2、for 循环结构3、for range (键值循环4、switch case5、break:跳出循环go:跳转指定标签等等

一、Go语言运算符

运算符用于程序运行执行数学或逻辑运算。
Go 语言内置的运算符有:

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

1、算数运算符

接下来我们来详细看看各个运算符的介绍

  • +:相加
  • -:相减
  • *:相乘
  • /:相除
  • %:求余

举例:

package main

import "fmt"

func main() {

   var a int = 21
   var b int = 10
   var c int

   c = a + b
   fmt.Printf("第一行 - c 的值为 %dn", c )
   c = a - b
   fmt.Printf("第二行 - c 的值为 %dn", c )
   c = a * b
   fmt.Printf("第三行 - c 的值为 %dn", c )
   c = a / b
   fmt.Printf("第四行 - c 的值为 %dn", c )
   c = a % b
   fmt.Printf("第五行 - c 的值为 %dn", c )
   a++
   fmt.Printf("第六行 - a 的值为 %dn", a )
   a=21
   a--
   fmt.Printf("第七行 - a 的值为 %dn", a )
}

输出结果
在这里插入图片描述

golang中, ++ 和 – 只能单独使用错误写法如下

var i int = 8
var a int
a = i++  // 错误,i++只能单独使用
a = i--  // 错误,i--只能单独使用

同时在golang中,没有 ++i这样的操作

var i int = 1
++i  // 错误

正确写法

var i int = 1
i++ //正确

2、关系运算符

下表列出了所有Go语言关系运算符。

运算符 描述
== 检查两个是否相等,如果相等返回 True 否则返回 False
!= 检查两个是否不相等,如果不相等返回 True 否则返回 False
> 检查左边是否大于右边值,如果是返回 True 否则返回 False
< 检查左边值是否小于右边值,如果是返回 True 否则返回 False
&gt;= 检查左边值是否大于等于右边值,如果是返回 True 否则返回 False。
<= 检查左边值是否小于等于右边值,如果是返回 True 否则返回 False

以下实例演示关系运算符的用法

package main

import "fmt"

func main() {
	var a int = 21
	var b int = 10

	if a == b {
		fmt.Printf("第一行 - a 等于 bn")
	} else {
		fmt.Printf("第一行 - a 不等于 bn")
	}
	if a < b {
		fmt.Printf("第二行 - a 小于 bn")
	} else {
		fmt.Printf("第二行 - a 不小于 bn")
	}

	if a > b {
		fmt.Printf("第三行 - a 大于 bn")
	} else {
		fmt.Printf("第三行 - a 不大于 bn")
	}
	a = 5
	b = 20
	if a <= b {
		fmt.Printf("第四行 - a 小于等于 bn")
	}
	if b >= a {
		fmt.Printf("第五行 - b 大于等于 an")
	}
}

输出结果
在这里插入图片描述

3、逻辑运算符

下表列出了所有Go语言的逻辑运算符。

运算符 描述
&amp;&amp; 逻辑 AND 运算符。 如果两边的操作数都是 True,则条件 True,否则为 False。
|| 逻辑 OR 运算符。 如果两边的操作数有一个 True,则条件 True,否则为 False。
! 逻辑 NOT 运算符。 如果条件为 True,则逻辑 NOT 条件 False,否则为 True。

以下实例演示了逻辑运算符的用法

package main

import "fmt"

func main() {
	var a bool = true
	var b bool = false
	if a &amp;&amp; b {
		fmt.Printf("第一行 - 条件truen")
	}
	if a || b {
		fmt.Printf("第二行 - 条件为 truen")
	}
	a = false
	b = true
	if a &amp;&amp; b {
		fmt.Printf("第三行 - 条件为 truen")
	} else {
		fmt.Printf("第三行 - 条件falsen")
	}
	if !(a &amp;&amp; b) {
		fmt.Printf("第四行 - 条件为 truen")
	}
}

输出结果
在这里插入图片描述

4、位运算符

位运算符对整数内存中的二进制位进行操作
下表列出了位运算符 &amp;, |, 和 ^ 的计算

p q p &amp; q p | q p ^ q
0 0 0 0 0
0 1 0 1 1
1 1 1 1 0
1 0 0 1 1

假定 A = 60; B = 13; 其二进制转换为:

A = 0011 1100

B = 0000 1101

-----------------

A&amp;B = 0000 1100

A|B = 0011 1101

A^B = 0011 0001

Go 语言支持的位运算符如下所示

运算符 描述
&amp; 按位与运算符”&amp;”是双目运算符。 其功能是参与运算的两数对应的二进位相与。
| 按位或运算符”
^ 按位异或运算符”^”是双目运算符。 其功能是参与运算的两数对应的二进位异或,当两对应的二进位相异时,结果为1。
<< 左移运算符”<<“是双目运算符。左移n位就是乘以2的n次方。 其功能把”<<“左边的运算数的各二进位全部左移若干位,由”<<“右边的数指定移动位数,高位丢弃,低位补0。
>> 右移运算符”>>“是双目运算符。右移n位就是除以2的n次方。 其功能是把”>>“左边的运算数的各二进位全部右移若干位,”>>”右边的数指定移动位数

以下实例演示了位运算符的用法

package main

import "fmt"

func main() {

	var a uint = 60 /* 60 = 0011 1100 */
	var b uint = 13 /* 13 = 0000 1101 */
	var c uint = 0

	c = a &amp; b /* 12 = 0000 1100 */
	fmt.Printf("第一行 - c 的值为 %dn", c)

	c = a | b /* 61 = 0011 1101 */
	fmt.Printf("第二行 - c 的值为 %dn", c)

	c = a ^ b /* 49 = 0011 0001 */
	fmt.Printf("第三行 - c 的值为 %dn", c)

	c = a << 2 /* 240 = 1111 0000 */
	fmt.Printf("第四行 - c 的值为 %dn", c)

	c = a >> 2 /* 15 = 0000 1111 */
	fmt.Printf("第五行 - c 的值为 %dn", c)
}

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

5、赋值运算符

运算符 描述
= 简单赋值运算符,将一个表达式的值赋给一个左值
+= 相加后再赋值
-= 相减后再赋值
*= 相乘后再赋值
/= 相除后再赋值
%= 求余后再赋值
<<= 左移后赋值
>>= 右移后赋值
&= 按位与后赋值
^= 按位异或后赋值
|= 按位或后赋值

以下实例演示了赋值运算符的用法

package main

import "fmt"

func main() {
	var a int = 21
	var c int

	c = a
	fmt.Printf("第 1 行 - =  运算符实例,c 值为 = %dn", c)

	c += a
	fmt.Printf("第 2 行 - += 运算符实例,c 值为 = %dn", c)

	c -= a
	fmt.Printf("第 3 行 - -= 运算符实例,c 值为 = %dn", c)

	c *= a
	fmt.Printf("第 4 行 - *= 运算符实例,c 值为 = %dn", c)

	c /= a
	fmt.Printf("第 5 行 - /= 运算符实例,c 值为 = %dn", c)

	c = 200

	c <<= 2
	fmt.Printf("第 6行  - <<= 运算符实例,c 值为 = %dn", c)

	c >>= 2
	fmt.Printf("第 7 行 - >>= 运算符实例,c 值为 = %dn", c)

	c &= 2
	fmt.Printf("第 8 行 - &= 运算符实例,c 值为 = %dn", c)

	c ^= 2
	fmt.Printf("第 9 行 - ^= 运算符实例,c 值为 = %dn", c)

	c |= 2
	fmt.Printf("第 10 行 - |= 运算符实例,c 值为 = %dn", c)

}

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

6、其他运算符

运算符 描述
& 返回变量存储地址
* 指针变量

以下实例演示了其他运算符的用法

package main

import "fmt"

func main() {
	var a int = 4
	var b int32
	var c float32
	var ptr *int
	fmt.Printf("第 1 行 - a 变量类型为 = %Tn", a)
	fmt.Printf("第 2 行 - b 变量类型为 = %Tn", b)
	fmt.Printf("第 3 行 - c 变量类型为 = %Tn", c)
	ptr = &a
	fmt.Printf("a 的值为  %dn", a)
	fmt.Printf("*ptr 为 %dn", *ptr)
}

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

7、运算符优先级

有些运算符拥有较高的优先级,二元运算符的运算方向均是从左至右。下表列出了所有运算符以及它们的优先级,由上至下代表优先级由高到低:

优先级 运算符
5 * / % << >> & &^
4 + – | ^
3 == != < <= > >=
2 &&
1 ||

当然,你可以通过使用括号临时提升某个表达式整体运算优先级
以上实例运行结果:

package main

import "fmt"

func main() {
	var a int = 20
	var b int = 10
	var c int = 15
	var d int = 5
	var e int

	e = (a + b) * c / d // ( 30 * 15 ) / 5
	fmt.Printf("(a + b) * c / d 的值为 : %dn", e)

	e = ((a + b) * c) / d // (30 * 15 ) / 5
	fmt.Printf("((a + b) * c) / d 的值为  : %dn", e)

	e = (a + b) * (c / d) // (30) * (15/5)
	fmt.Printf("(a + b) * (c / d) 的值为  : %dn", e)

	e = a + (b*c)/d //  20 + (150/5)
	fmt.Printf("a + (b * c) / d 的值为  : %dn", e)
}

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

二、Go的流程控制

流程控制是每种编程语言控制逻辑走向和执行次序的重要部分,流程控制可以说是一门语言的“经脉”
Go 语言中最常用的流程控制有if和for,而switchgoto主要是为了简化代码、降低重复代码而生的结构属于扩展类的流程控制。

1、if else

推荐if后面不适用括号,当然也可以使用括号括起来

func main() {
	var num = 10
	if num == 10 {
		fmt.Println("hello == 10")
	} else if(num > 10) {
		fmt.Println("hello > 10")
	} else {
		fmt.Println("hello < 10")
	}
}

if的另外一种写法,下面的方法区别num2是局部变量

if num2:= 10; num2>=10 {
    fmt.Println("hello >=10")
}

2、for 循环结构

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

for循环基本格式如下

for 初始语句; 条件表达式; 结束语句 {
	循环}

条件表达式返回true时循环体不停地进行循环,直到条件表达式返回false自动退出循环

实例:打印1 ~ 10

for i := 0; i < 10; i++ {
    fmt.Printf("%v ", i+1)
}

注意,在Go语言中,没有while语句我们可以通过for来代替

for {
    循环体
}

for循环可以通过breakgoto、return、panic语句退出循环

3、for range(键值循环)

Go 语言中可以使用for range遍历数组切片字符串map通道channel)。通过for range遍历返回值有以下规律:

实例:遍历字符串

var str = "你好golang"
for key, value := range str {
    fmt.Printf("%v - %c ", key, value)
}

在这里插入图片描述
遍历切片(数组)

var array = []string{"php", "java", "node", "golang"}
for index, value := range array {
    fmt.Printf("%v %s ", index, value)
}

在这里插入图片描述

4、switch case

使用switch语句可方便的对大量的值进行条件判断

extname := ".a"
	switch extname {
	case ".html":
		{
			fmt.Println(".html")
			break
		}
	case ".doc":
		{
			fmt.Println(".doc")
			break
		}
	case ".js":
		{
			fmt.Println(".js")
		}
	default:
		{
			fmt.Println("其它后缀")
		}
	}

在这里插入图片描述
switch的另外一种写法

switch extname := ".a"; extname {
	case ".html":
		{
			fmt.Println(".html")
			break
		}
	case ".doc":
		{
			fmt.Println(".doc")
			break
		}
	case ".js":
		{
			fmt.Println(".js")
		}
	default:
		{
			fmt.Println("其它后缀")
		}
	}

在这里插入图片描述
同时一个分支可以有多个

extname := ".txt"
	switch extname {
	case ".html":
		{
			fmt.Println(".html")
			break
		}
	case ".txt", ".doc":
		{
			fmt.Println("传递来的是文档")
			break
		}
	case ".js":
		{
			fmt.Println(".js")
		}
	default:
		{
			fmt.Println("其它后缀")
		}
	}

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

tip:在golang中,break可以不写,也能够跳出case,而不会执行其它的。

如果我们需要使用switch穿透 fallthroughtfallthrough语法可以执行满足条件的 case 的下一个case,为了兼容c语言中的case设计

extname := ".txt"
	switch extname {
	case ".html":
		{
			fmt.Println(".html")
			fallthrought
		}
	case ".txt", ".doc":
		{
			fmt.Println("传递来的是文档")
			fallthrought
		}
	case ".js":
		{
			fmt.Println(".js")
			fallthrought
		}
	default:
		{
			fmt.Println("其它后缀")
		}
	}

fallthrought 只能穿透紧挨着的一层,不会一直穿透,但是如果每一层都写的话,就会导致每一层都进行穿透

5、break:跳出循环

Go语言中break 语句用于以下几个方面:

  • 用于循环语句中跳出循环,并开始执行循环之后的语句。
  • break在switch开关语句)中在执行一条case后跳出语句的作用。
  • 在多重循环中,可以用标号label标出想break的循环。
var i = 0
for  {
    if i == 10{
        fmt.Println("跳出循环")
        break
    }
    i++
    fmt.Println(i)
}

6、go跳转指定标签

goto 语句通过标签进行代码间的无条件跳转。goto 语句可以在快速跳出循环、避免重复退出上有一定的帮助。Go语言中使用goto语句能简化一些代码实现过程

	var n = 20
	if n > 24 {
		fmt.Println("成年人")
	} else {
		goto lable3
	}

	fmt.Println("aaa")
	fmt.Println("bbb")
lable3:
	fmt.Println("ccc")
	fmt.Println("ddd")

在这里插入图片描述

原文地址:https://blog.csdn.net/weixin_63172698/article/details/134625882

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_23700.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注