学习Golang操作符指南与实例

292 阅读8分钟

Golang Operators examples

Go语言运算符

像许多编程语言一样,Golang 支持各种内置的操作符。

Go语言中操作符的重要意义

  • 操作符是用来对给定的操作数执行一些操作的字符序列。
  • Go语言中的每个运算符都是单项运算符或二项运算符的类型。二进制运算符接受两个操作数,单进制运算符接受一个操作数。
  • 操作符用表达式对一个或两个操作数进行操作
  • 这些都是用来形成表达式的

以下是本博文中涉及的不同类型:

  • 算术运算符
  • 关系运算符
  • 逻辑运算符
  • 位操作符
  • 赋值运算符
  • 地址操作符
  • 其他运算符
  • 操作符优先级

操作符的语法

有两种类型的运算符

  • unary - 适用于单个操作数
  • binary - 适用于两个操作数。

下面是一个Unary 操作符语法

下面是一个Binary 操作符语法

Operand1 Operator Operand2  

操作数是需要被操作的数据或变量。

Golang算术运算符

Arithmetic 运算符对数值进行算术计算,如加法、乘法、减法等。 假设操作数a和b的值是10,5。

符号符号名称用法说明例子
+加法a+b两个数值的总和10+5=15
-减法a-b减去两个值10-5=5
乘法a*b两个数值相乘10*5=50
商数a/b操作数除以分母10/5=2
%模数a%b应用商数后的剩余部分10%5=0
++增量a+=增加一个值10++=11
--递减a-递减值为一10-=9

四个运算符(+,-,*,/)对数字类型进行操作,如IntegerFloat,Complex+ 对字符串进行操作。++-- 对数字类型进行操作。

以下是一个使用算术运算符的例子

package main  
  
import "fmt"  
  
func main() {  
 var a int = 100  
 var b int = 50  
 var result int  
  
 result = a + b  
 fmt.Printf("Output of Plus Operator %d\n", result)  
 result = a - b  
 fmt.Printf("Output of Minus Operator %d\n", result)  
 result = a * b  
 fmt.Printf("Output of Star Operator %d\n", result)  
 result = a / b  
 fmt.Printf("Output of Divide Operator %d\n", result)  
 result = a % b  
 fmt.Printf("Output of Remainder Operator %d\n", result)  
 a++  
 fmt.Printf("Output of Increment Operator %d\n", a)  
 a--  
 fmt.Printf("Output of Decrement Operator %d\n", a)  
}  

上述程序代码执行的输出是

Output of Plus Operator 150  
Output of Minus Operator 50  
Output of Star Operator 5000  
Output of Divide Operator 2  
Output of Remainder Operator 0  
Output of Increment Operator 101  
Output of Decrement Operator 100

Golang比较或关系运算符

Comparison 运算符用于比较表达式中的操作数,操作数可以是命名的类型,比较同一类型的操作数或同一类型的值。

这些运算符用(和)括起来,即(a==b),如果没有括起来--a==b会产生编译错误--不能在赋值中使用a==b(bool类型)作为int类型的运算符,正如下面的关键说明中提到的,任何类型的运算符都可以使用,并且这种比较的返回值是未定型的布尔值--真或假。

比较运算符的要点

  • 所有的原始类型(整数、浮点数、布尔值、字符串)都可以进行比较。
  • 复杂的数据类型,通道指针可以与此比较
  • 接口可以比较,并返回true - 如果两个接口的动态类型、数值相同,或为nil,否则返回false
  • 如果结构体可以比较并返回true--属性或字段是相等的
  • 如果数组与此比较,返回true - 如果两个数组的值都相等

以下是Go内置的比较运算符的列表

符号符号名称用法说明例子
==相同或相等(a==b)检查并比较两个值,如果都相等,则为真,如果都不相等,则为假(10==5)为假
!=不相等(a!=b)检查并比较两个值,真--如果两者都不相等,假--如果两者都相等(10!=5)为真
>大于(a>b)检查并比较第一个值是否大于第二个值,返回真,否则返回假(10>5)为真
>=大于等于(a>=b)检查并且第一个值大于或等于第二个值,返回真,否则返回假。(10>=5)为真
<小于(a<b)检查并且第一个值小于第二个值,返回真,否则返回假。(11<5)为假
<=小于等于(a<=b)检查并且第一个值小于等于第二个值,返回真,否则返回假。(10<=5)为真

下面是一个Golang比较运算符的例子

package main  
  
import "fmt"  
  
func main() {  
 var a int = 100  
 var b int = 50  
 var result bool  
  
 result = (a == b)  
 fmt.Printf("1# Output of Equal Operator %t\n", result)  
 result = (a != b)  
 fmt.Printf("2# Output of Not Equal Operator %t\n", result)  
 result = (a < b)  
 fmt.Printf("3# Output of Less Than Operator %t\n", result)  
 result = (a <= b)  
 fmt.Printf("4# Output of Less Than Equal Operator %t\n", result)  
 result = (a > b)  
 fmt.Printf("5# Output of Greater Than Operator %t\n", result)  
 result = (a >= b)  
 fmt.Printf("6# Output of Greater Than Equal Operator %t\n", result)  
}  

当上述程序被编译和执行时,输出以下结果

1# Output of Equal Operator false  
2# Output of Not Equal Operator true  
3# Output of Less Than Operator false  
4# Output of Less Than Equal Operator false  
5# Output of Greater Than Operator true  
6# Output of Greater Than Equal Operator true  

Golang逻辑运算符

Logical 操作符接受布尔值并返回一个布尔值。

它包含左和右操作数。如果左操作数被评估为真,右操作数将不会被评估。

这些被称为短路规则,如果两个操作数(1 && 1)都不是布尔值,就会产生无效操作的编译错误。1 && 1 (操作符&&在未定型的数字上没有定义)

以下是Go语言中支持的运算符列表。

符号符号名称用法说明例子
&&逻辑与(a&&b)true - 如果两个操作数都被评估为真, false - 如果其中一个操作数被评估为假(true&true)为真
逻辑OR(ab)true - 如果其中一个操作数被评估为真,false - 如果两个操作数都被评估为假。(falsetrue)为真
!逻辑NOT(a!b)与操作数的评估值相反 - 真变成假,假变成真(!true)为假

下面是一个逻辑运算符的使用例子

package main  
  
import "fmt"  
  
func main() {  
 var operand1 bool = true  
 var operand2 bool = false  
 var result bool  
 result = (operand1 && operand2)  
 fmt.Printf("1# Output of Conditional AND Operator %t\n", result)  
 result = (operand1 || operand1)  
 fmt.Printf("2# Output of Conditional OR Operator %t\n", result)  
 result = (!operand1)  
 fmt.Printf("3# Output of Conditional NOT Operator %t\n", result)  
  
}  

编译和运行上述操作是

1# Output of Conditional AND Operator false  
2# Output of Conditional OR Operator true  
3# Output of Conditional NOT Operator false  

Golang位操作符

这些操作符用于位操作。 Go语言支持不同的位操作符。 它只对位进行操作。在位0和1上生成真表操作值

| 操作数1 | 操作数2 | 操作数1 & 操作数2 | Operand1 | Operand2 | 操作数1 ^ 操作数2 | | --- | --- | --- | --- | --- | | 0 | 0 | 0 | 0 | 0 | | 0 | 1 | 0 | 1 | 1 | | 1 | 1 | 1 | 1 | 1 | | 1 | 0 | 0 | 1 | 1 | | {< /table >}}} | | | | |

以下是Go中支持的Bitwise操作符的列表

下面是一个逻辑运算符的例子

package main    
import "fmt"  
  
func main() {  
 var operand1 uint = 10 // bits are 0000 1010  
 var operand2 uint = 5  // bits are 0000 0011  
 var result uint = 0  
  
 result = (operand1 & operand2)  
 fmt.Printf("1# Output of Bitwise AND Operator %d\n", result)  
 result = (operand1 | operand1)  
 fmt.Printf("2# Output of Bitwise OR Operator %d\n", result)  
 result = (operand1 ^ operand2)  
 fmt.Printf("3# Output of Bitwise XOR Operator %d\n", result)  
 result = (operand1 &^ operand2)  
 fmt.Printf("4# Output of AND NOT Operator %d\n", result)  
 result = (operand1 << operand2)  
 fmt.Printf("5# Output of Left Shift Operator %d\n", result)  
 result = (operand1 >> operand2)  
 fmt.Printf("6# Output of Right Shift Operator %d\n", result)  
}  
  

编译和运行上述内容是

1# Output of Bitwise AND Operator 0  
2# Output of Bitwise OR Operator 10  
3# Output of Bitwise XOR Operator 15  
4# Output of AND NOT Operator 10  
5# Output of Left Shift Operator 320  
6# Output of Right Shift Operator 0  

Golang赋值运算符

Assignment 运算符用来进行一些运算,最后将结果分配给左边的操作数。

Golang支持多个赋值运算符

下面是一个使用赋值运算符的例子

package main  
  
import "fmt"  
  
func main() {  
 var operand1 int = 10  
 var result = 0  
 result = operand1  
 fmt.Printf("1# Output of Assignment Operator %d\n", result)  
 result += operand1  
 fmt.Printf("2# Output of Addition AND Assignment Operator %d\n", result)  
 result -= operand1  
 fmt.Printf("3# Output of Subtraction AND Assignment Operator %d\n", result)  
 result *= operand1  
 fmt.Printf("4# Output of Multiply AND Assignment Operator %d\n", result)  
 result /= operand1  
 fmt.Printf("5# Output of Divide AND Assignment Operator %d\n", result)  
 result %= operand1  
 fmt.Printf("6# Output of Moudulus AND Assignment Operator %d\n", result)  
 result &= operand1  
 fmt.Printf("7# Output of Bitwise And  AND Assignment Operator %d\n", result)  
 result |= operand1  
 fmt.Printf("8# Output of Bitwise OR AND Assignment Operator %d\n", result)  
 result ^= operand1  
 fmt.Printf("9# Output of Bitwise XOR AND Assignment Operator %d\n", result)  
}  

当上述程序代码被编译和执行时,输出为

1# Output of Assignment Operator 10  
2# Output of Addition AND Assignment Operator 20  
3# Output of subtraction AND Assignment Operator 10  
4# Output of Multiply AND Assignment Operator 100  
5# Output of Divide AND Assignment Operator 10  
6# Output of Modulus AND Assignment Operator 0  
7# Output of Bitwise And  AND Assignment Operator 0  
8# Output of Bitwise OR AND Assignment Operator 10  
9# Output of Bitwise XOR AND Assignment Operator 0  

Golang地址运算符

有两个操作符与变量的地址有关
星号 * 操作符
这些都是用来给出一个变量的指针和取消指针的,它给出了一个指向某一点的指针。

安培号&操作符
这给出了一个变量的地址。它给出了保存在内存中的变量的实际位置。
下面是一个Asterisk和Ampersand操作符的例子

package main  
  
import "fmt"  
  
func main() {  
 var v1 int = 12  
 var v2 int32  
 var v3 float32  
 var v4 string  
 var v5 bool  
 var pointerVar *int  
 fmt.Printf("1# Variable Data Type %T\n", v1)  
 fmt.Printf("2# Variable Data Type %T\n", v2)  
 fmt.Printf("3# Variable Data Type %T\n", v3)  
 fmt.Printf("4# Variable Data Type %T\n", v4)  
 fmt.Printf("5# Variable Data Type %T\n", v5)  
 fmt.Printf("6# variable v1 value %d\n", v1)  
 fmt.Printf("7# Address of varible v1 %d\n", &v1)  
 pointerVar = &v1  
 fmt.Printf("8# variable pointerVar value %d\n", *pointerVar)  
 fmt.Printf("9# Address of varible pointerVar %d\n", &pointerVar)  
  
}  

上述程序的输出是

1# Variable Data Type int  
2# Variable Data Type int32  
3# Variable Data Type float32  
4# Variable Data Type string  
5# Variable Data Type bool  
6# variable v1 value 12  
7# Address of varible v1 824634048600  
8# variable pointerVar value 12  
9# Address of varible pointerVar 824634212376  

Golang操作符的优先级

在任何表达式中,多个运算符被应用,优先级决定了哪个运算符先运行的评估顺序。一元运算符比二元运算符的优先级最高。