GO语言语法(3) | 青训营

83 阅读4分钟

GO语言基础语法(3)

本章写的主要是运算符,运算符的应用及代码的使用过程,运算符我们在编程中会使用的比较频繁,所以重点拉出来写写,这也是我自己学的整理成的笔记。可以一起学习学习。 在 Go 语言中,有很多种运算符,这些运算符的计算顺序是按照一定的规则来确定的,这就是所谓的运算符优先级,它能够决定程序执行顺序。本文将介绍 Go 语言中的运算符优先级。

一、基础运算符

  1. 算术运算符

算术运算符包括加(+)、减(-)、乘(*)、除(/)和取余(%)五种,其中优先级从高到低依次为:

  1. 括号(())
  2. 取反(-x)
  3. 乘法、除法和取余(*、/、%)
  4. 加法、减法(+、-)

举个例子:

a := 10 + 202 // 先乘法,再加法,等价于 a := 10 + (202) = 50
b := (10 + 20) 2 // 使用括号,先加法,再乘法,等价于 b := (10+20) 2 = 60

  1. 关系运算符

关系运算符包括等于(==)、不等于(!=)、大于(>)、小于(<)、大于等于(>=)和小于等于(<=)六种,其中优先级从高到低依次为:

  1. 括号(())
  2. 大于、小于、大于等于、小于等于(>、<、>=、<=)
  3. 等于、不等于(==、!=)

举个例子:

a := 10 > 5 && 5 < 3 || 4 > 2 // 先执行 &&,再执行 ||,等价于 a := (10 > 5 && 5 < 3) || (4 > 2) = true

  1. 逻辑运算符

逻辑运算符包括取反(!)、与(&&)和或(||)三种,其中优先级从高到低依次为:

  1. 括号(())
  2. 取反(!)
  3. 与(&&)
  4. 或(||)

举个例子:

a := true || false && !true // 先执行 !,再执行 &&,最后执行 ||,等价于 a := true || false = true

二、位运算符

位运算符包括按位与(&)、按位或(|)、异或(^)、左移(<<)和右移(>>)五种,其中优先级从高到低依次为:

  1. 括号(())
  2. 左移、右移(<<、>>)
  3. 按位与(&)
  4. 按位异或(^)
  5. 按位或(|)

举个例子:

a := 1 << 2 & 3 | 4 ^ 5 >> 2 // 先执行 <<、>>,再执行 &、^,最后执行 |,等价于 a := 0 | 1 = 1

三、赋值运算符

赋值运算符包括等于(=)、加等于(+=)、减等于(-=)、乘等于(*=)、除等于(/=)、取余等于(%=)、左移等于(<<=)、右移等于(>>=)、按位与等于(&=)、按位或等于(|=)和按位异或等于(^=)十一种,其中优先级从低到高依次为:

  1. 按位或等于(|=)
  2. 按位异或等于(^=)
  3. 按位与等于(&=)
  4. 左移等于(<<=)
  5. 右移等于(>>=)
  6. 取余等于(%=)
  7. 除等于(/=)
  8. 乘等于(*=)
  9. 减等于(-=)
  10. 加等于(+=)
  11. 等于(=)

举个例子:

a, b := 1, 2
a += b + 3 4 // 先执行乘法,再执行加法,最后执行 +=,等价于 a = a + (b + 3 4) = 15

通过了解 Go 语言中各种运算符的优先级,我们可以更加准确地写出程序,并且更好地理解程序的计算过程。

算术运算符

  • 运算符:+,-,*,/,%,++,--
  • 介绍:算术运算符是对数值类型的变量进行运算,比如,加减乘法。
  • 代码请连起来看,分开是为了解释

加号的用法

1.正数,2.相加操作,3.字符串连接

package main

import "fmt"

func main() {
	//+加号
	//1.正数,2.相加操作,3.字符串连接
	var n1 int = +10
	fmt.Println(n1)
	var n2 int = 2 + 5
	fmt.Println(n2)
	var s1 string = "abc" + "df"
	fmt.Println(s1)

除号

  • 两个int类型数据类型,结果一定为整数类型
  • 浮点类型参与运算运算,结果为浮点
   fmt.Println(10 / 3)   //两个int类型数据类型,结果一定为整数类型
   fmt.Println(10.0 / 3) //浮点类型参与运算运算,结果为浮点

%取模

等价公式:a%b=a-a/b*b

	fmt.Println(10 % 3) //10%3=10-10/3*3=1
	fmt.Println(-10 % 3)
	fmt.Println(10 % -3)
	fmt.Println(-10 % -3)

++自增操作,--自减

加1操作 --,减1操作

	var a int = 3
	a++
	fmt.Println(a) //4
	a--
	fmt.Println(a)
	//go语言里,++ --操作非常简单,只能单独使用,不能参与到运算中去
	//go语言里,++ -- 只能在变量的后面,不能写在变量前面,--a,++a是错的
}

赋值运算符

  • 赋值运算符:= ,+= ,-=,-=,*=,/=,%=
  • 赋值运算符就是将某个运算后的值,赋给指定的变量
  • 代码需要一起看,分开是为了解释
package main

import "fmt"

func main() {
	var num1 int = 10
	fmt.Println(num1)
	var num2 int = (10+20)%3 + 3 - 7 //=等号右侧的值运算清楚后,再赋值给=的左侧
	fmt.Println(num2)

	var num3 int = 10
	num3 += 20 //等价num3 = num3 + 30
	fmt.Println(num3)

交换两个数的值并输出结果:(这里是拓展,接触过其他语言的人应该不难理解,而且会用)

	var a int = 8
	var b int = 4
	fmt.Printf("a = %v,b = %v", a, b)
	//交换
	//引入中间变量
	var t int
	t = a
	a = b
	b = t
	fmt.Printf("a = %v,b = %v", a, b)
}

关系运算符

  • 关系运算符:==,!=,>,<,>=,<=
  • 关系运算符的结果都是bool类型,也就是要么是true,要么是false
  • 关系表达式经常用在流程控制中
package main

import "fmt"

func main() {
	fmt.Println(1 == 9) //判断左右两侧的值是否相等,相等返回true,不相等返回false,==不是=
	fmt.Println(1 != 9) //判断不等于
	fmt.Println(1 > 9)
	fmt.Println(1 < 9)
	fmt.Println(1 >= 9)
	fmt.Println(1 <= 9)

}

逻辑运算符

逻辑运算符 :&&,||,!

  • &&:逻辑与运算符,如果两边的操作数都是true,则为true,否则为false
  • ||:逻辑或运算符,如果两边的操作数有一个true,则为true,否则为false
  • !:逻辑非运算符,如果条件为true,则逻辑为false,否则为true
package main

import (
	"fmt"
)

func main() {
	fmt.Println(3 == 5 && 4 > 2) //false
	fmt.Println(3 == 5 || 4 > 2) //true
	fmt.Println(!(10 > 5))       //false
}

其他运算符

其他运算符

  • &:返回变量的存储地址
  • *:取指针变量对应的数值
  • 可以看指针那边,差不多的,就是*和&的区别
package main

import "fmt"

func main() {
	//定义一个变量
	var age int = 20
	fmt.Println("age对应的存储空间的地址为: ", &age) //age对应的存储空间的地址为:  0xc000018098

	var ptr *int = &age
	fmt.Println(ptr)                       //0xc000018098
	fmt.Println("ptr这个指针指向的具体数值为: ", *ptr) //ptr这个指针指向的具体数值为:  20
}