在本教程中,您将学习 Go 编程语言中使用的各种类型的运算符。
我们将进一步讨论这些运算符如何用于创建构成 Go 代码的简单易懂的表达式。
运算符是每种编程语言的基本组成部分。任何编程语言中的运算符都是一个符号,表示执行一些数学计算或函数。运算符用于对操作数(变量和值)执行特定操作。操作数是运算符接受的输入或参数之一。例如,20 + 30 =? 的加法是一个由操作数和运算符组成的表达式,数字 20 和 30 代表输入或操作数,而符号“+”、“=”构成运算符?

注意:表达式根据运算符的优先级和结合性进行求值。
运算符可以根据操作数参与操作的类型分为一元和二元。
Golang 支持与其他编程语言类似的运算符,例如:
在接下来的几节中,我们将单独讨论每个运算符。

符号运算符表示 Go 编程语言中值的符号。主要有两种类型的符号运算符。

正号(“+”)和负号(“-”)运算符表示 Golang 中声明的变量的整数值的符号,无论是正数还是负数。让我们通过下面的简单 Go 程序来理解这一点。
示例
package main
import "fmt"
func main() {
var s = 1
// -(-1)= +1
fmt.Println(" + sign operator prints positive numbers ")
fmt.Println(-(-s))
// -1 = -1
fmt.Println(" - sign operator prints negative numbers ")
fmt.Println(-s)
}
输出
+ sign operator prints positive numbers 1 - sign operator prints negative numbers -1
在上面的程序中,变量 s 使用 var 关键字声明,负号表示整数的符号是正数还是负数。
Go 支持递增和递减操作,与许多其他编程语言一样,用于增加(递增)或减少(递减)值。表示递增运算符的符号是“++”,递减运算符是“--”。假设变量 x 声明并赋值为 10。即 var x = 10。

让我们通过一个例子来理解这个概念
示例
package main
import "fmt"
func main() {
x := 10
x++ //increment operator x=x+1=10+1=11
x++ //increment operator x=11+1=12
fmt.Println("The varaiable x is incremented two times ",x)
x-- // decrement operator x=12,x-1=12-1=11
fmt.Println("The variable x is decremented one time ", x)
}
输出
The varaiable x is incremented two times 12 The variable x is decremented one time 11
算术运算符用于在操作数之间执行算术运算。
| 运算符 | 操作名称 | 描述 | 示例 | |
|---|---|---|---|---|
| 操作 | 结果 | |||
| + | 加法 | 用于添加两个操作数 | 2 + 5 | 7 |
| - | 减法 | 用于从第一个操作数中减去第二个操作数。 | 5 - 4 | 1 |
| * | 乘法 | 用于乘以两个操作数 | 2 * 6 | 12 |
| / | 除法 | 用于将第一个操作数除以第二个操作数。 | 6 / 2 | 3 |
| % | 取模 | 此运算符返回操作数之间除法的余数。 | 5 % 2 | 1 |
package main
import ("fmt")
func main() {
x:= 10
y:= 2
fmt.Println("Addition:",x+y)
fmt.Println("Subtraction:",x-y)
fmt.Println("Multiplication:",x*y)
fmt.Println("Division:",x/y)
fmt.Println("Modulus:",x%y)
}
输出
Addition: 12 Subtraction: 8 Multiplication:20 Division:5 Modulus:0
比较运算符将其左侧值(或表达式)与右侧值(或表达式)进行比较。比较运算符也称为关系运算符。使用比较运算符的操作输出将是布尔值,即 true 或 false。
| 运算符 | 操作名称 | 描述 | 示例 | |
|---|---|---|---|---|
| 操作 | 结果 | |||
| == | 等于 | 此运算符用于检查两个操作数是否相等。如果第一个操作数等于第二个操作数,则返回 true。否则,返回 false。 | 4 == 4 | TRUE |
| 2 == 5 | FALSE | |||
| != | 不等于 | 此运算符将检查两个操作数是否相等,如果不相等则返回 true,否则返回 false。 | 2 != 2 | FALSE |
| 4 != 5 | TRUE | |||
| < | 小于 | 此运算符将返回 true,如果第一个操作数的值小于第二个操作数,否则返回 false。 | 3 < 6 | TRUE |
| 2 < 2 | FALSE | |||
| <= | 小于或等于 | 此运算符将返回 true,如果第一个操作数的值小于或等于第二个操作数,否则返回 false。 | 7 <= 7 | TRUE |
| 10 <= 5 | FALSE | |||
| > | 大于 | 此运算符将返回 true,如果第一个操作数的值大于第二个操作数,否则返回 false。 | 10 > 3 | TRUE |
| 3 > 3 | FALSE | |||
| >= | 大于或等于 | 此运算符将返回 true,如果第一个操作数的值大于或等于第二个操作数,否则返回 false。 | 10 >= 10 | TRUE |
| 1 >= 4 | FALSE | |||
package main
import ("fmt")
func main() {
var x = 3
var y = 2
fmt.Println(x==y)
}
输出
false
package main
import ("fmt")
func main() {
var x = 3
var y = 2
fmt.Println(x!=y)
}
输出
true
package main
import ("fmt")
func main() {
var x = 3
var y = 2
fmt.Println(x>y)
}
输出
true
package main
import ("fmt")
func main() {
var x = 3
var y = 2
fmt.Println(x>=y)
}
输出
true
package main
import ("fmt")
func main() {
var x = 3
var y = 2
fmt.Println(x<y)}
输出
false
packagemain
import ("fmt")
func main() {
var x = 3
var y = 2
fmt.Println(x<=y)
}
输出
false
逻辑运算符用于执行逻辑运算 AND、OR 和 NOT。使用逻辑运算符的操作输出将是布尔值,即 true 或 false。
| 运算符 | 操作名称 | 描述 | 示例 | |
|---|---|---|---|---|
| 操作 | 结果 | |||
| && | AND | 此运算符在两个语句都为 true 时返回 true,否则返回 false。 | 如果 x 的值为 5,则 (x > 4 && x < 6) | true |
| 如果 x 的值为 2,则 (x > 4 && x < 6) | false | |||
| || | OR | 此运算符在任一语句为 true 时返回 true,否则返回 false。 | 如果 x 的值为 5,则 (x < 10 || x == 5) | true |
| 如果 x 的值为 5,则 (x > 10 || x == 20) | false | |||
| ! | NOT | 此运算符反转结果。 NOT 运算符在语句为 false 时返回 true,在语句为 true 时返回 false。 | 如果 x 的值为 5,则 (!(x > 4 && x < 6)) | true |
| 如果 x 的值为 5,则 (!(x > 4 || x < 6)) | false | |||
package main
import ("fmt")
func main() {
var x = 5
fmt.Println(x > 4 && x < 6)
}
输出
true
package main
import ("fmt")
func main() {
var x = 5
fmt.Println(x < 10 || x > 20)
}
输出
true
package main
import ("fmt")
func main() {
var x = 5
fmt.Println(!(x > 4))
}
输出
false
位运算符用于对二进制数执行位运算。首先,整数被转换为二进制格式,然后逐位执行操作。
| 运算符 | 操作名称 | 描述 | 示例 |
|---|---|---|---|
| & | 按位 AND | 两个操作数都被转换为二进制数系统,并对二进制数的每个位执行 AND 操作。 | 如果 x=3 且 y=2,x 的二进制值为 11,y 的二进制值为 10,则 x & y = 10 |
| | | 按位 OR | 两个操作数都被转换为二进制数系统,并对二进制数的每个位执行 OR 操作。 | 如果 x=3 且 y=2,x 的二进制值为 11,y 的二进制值为 10,则 x | y = 11 |
| ^ | 按位 XOR | 两个操作数都被转换为二进制数系统,并对二进制数的每个位执行 XOR 操作。 | 如果 x=3 且 y=2,x 的二进制值为 11,y 的二进制值为 10,则 x ^ y = 1 |
| << | 左移 | 两个操作数都被转换为二进制数系统,并将第一个操作数的位向左移动指定的位数。 | 如果 x=10,x 的二进制值为 1010,则 x << 2 = 101000 |
| >> | 右移 | 两个操作数都被转换为二进制数系统,并将第一个操作数的位向右移动指定的位数。 | 如果 x=10,x 的二进制值为 1010,则 x >> 2 = 10 |
| &^ | AND NOT | 此运算符用于清除位。 | 如果 x=5 且 y=2,x 的二进制值为 101,y 的二进制值为 10,则 x &^ y = 101 |
package main
import ("fmt")
func main() {
var x = 10
var y = 11
fmt.Printf("x = %b\n",x)
fmt.Printf("y = %b\n",y)
fmt.Printf("x & y is %b\n",x & y)
fmt.Printf("x | y is %b\n",x | y)
fmt.Printf("x ^ y is %b\n",x ^ y)
}
输出
x = 11 y = 10 x & y is 10 x | y is 11 x ^ y is 1
package main
import ("fmt")
func main() {
var x = 10
fmt.Printf("x = %b\n",x)
fmt.Printf("x << 2 is %b\n",x << 2)
}
输出
x = 1010 x << 2 is 101000
package main
import ("fmt")
func main() {
var x = 10
fmt.Printf("x = %b\n",x)
fmt.Printf("x >> 2 is %b\n",x >> 2)
}
输出
x = 1010 x >> 2 is 10
package main
import ("fmt")
func main() {
var x = 5
var y = 2
fmt.Printf("x = %b\n",x)
fmt.Printf("y = %b\n",y)
fmt.Printf("x &^ y = %b\n",x &^ y)
}
输出
x = 101 y = 10 x & y is 101
变量是一个占位符,用于在 Go 程序中存储值以供后续使用。这些值通过称为赋值运算符的运算符分配给变量。

var 关键字使用运算符“=”将值 4 分配给变量 a。
注意:使用符号“:=”声明变量 a 为 a := 4 的简写声明与赋值运算符“=”不同。在 a := 4 中,变量 a 在一个步骤中被声明并赋值。
| 运算符 | 操作名称 | 描述 | 示例 | |
|---|---|---|---|---|
| 操作 | 等价于 | |||
| = | 赋值运算符 | 此运算符将右侧操作数的值赋给左侧操作数。 | x = 2 | |
| += | 加法赋值运算符 | 此运算符将在右侧和左侧操作数之间执行加法运算,并将输出赋给左侧操作数。 | x += y | x = x + y |
| -= | 减法赋值运算符 | 此运算符将从左侧操作数中减去右侧操作数,并将输出赋给左侧操作数。 | x -= y | x = x - y |
| /= | 除法赋值运算符 | 此运算符将左侧操作数除以右侧操作数,并将输出赋给左侧操作数。 | x /= y | x = x / y |
| *= | 乘法赋值运算符 | 此运算符将右侧操作数乘以左侧操作数,并将输出赋给左侧操作数。 | x *= y | x = x * y |
| %= | 模数赋值运算符 | 首先,此运算符计算左侧操作数对右侧操作数的模数,然后将输出赋给左侧操作数。 | x %= y | x = x % y |
| &= | 按位 AND 赋值运算符 | 首先,此运算符对左侧操作数执行按位 AND 运算,然后将输出赋给左侧操作数。 | x &= y | x = x & y |
| |= | 按位 OR 赋值运算符 | 首先,此运算符对左侧操作数执行按位 OR 运算,然后将输出赋给左侧操作数。 | x |= y | x = x | y |
| ^= | 按位 XOR 赋值运算符 | 首先,此运算符对左侧操作数执行按位 XOR 运算,然后将输出赋给左侧操作数。 | x ^= y | x = x ^ y |
package main
import ("fmt")
func main() {
var x = 2
var a = 3
var s = 3
var m = 3
var d = 3
var md = 3
a += 2
s -=2
m *= 2
d /= 2
md %= 2
fmt.Println("Using Asignment operator :",x)
fmt.Println("Using Add assignment operator :",a)
fmt.Println("Using Subtract assignment operator :",s)
fmt.Println("Using Multiply assignment operator :",m)
fmt.Println("Using Division assignment operator :",d)
fmt.Println("Using Modulus assignment operator :",md)
}
输出
Using asignment operator : 2 Using Add assignment operator : 5 Using Subtract assignment operator : 1 Using Multiply assignment operator : 6 Using Division assignment operator : 1 Using Modulus assignment operator : 1
package main
import ("fmt")
func main() {
var x = 3
var y = 2
fmt.Printf("x = %b\n",x)
fmt.Printf("y = %b\n",y)
x &= y
fmt.Printf("x &= y = %b\n",x)
}
输出
x = 11 y = 10 x &= y = 10
package main
import ("fmt")
func main() {
var x = 3
var y = 2
fmt.Printf("x = %b\n",x)
fmt.Printf("y = %b\n",y)
x |= y
fmt.Printf("x |= y = %b\n",x)
}
输出
x = 11 y = 10 x |= y = 11
package main
import ("fmt")
func main() {
var x = 5
var y = 8
fmt.Printf("x = %b\n",x)
fmt.Printf("y = %b\n",y)
x ^= y
fmt.Printf("x ^= y = %b\n",x)
}
输出
x = 101 y = 1000 x ^= y = 1101