Go 语言运算符详解
                           
天天向上
发布: 2025-03-25 23:43:05

原创
912 人浏览过

Go 语言提供了丰富的运算符(Operator),用于执行各种操作,如算术、逻辑、位运算等。本文将详细介绍 Go 语言的运算符及其用法。


1. Go 语言运算符分类

Go 语言的运算符主要包括以下几类:

运算符类别运算符描述
算术运算符+ - * / % ++ --基本数学运算
关系运算符== != > < >= <=比较两个值
逻辑运算符&& || !逻辑判断
位运算符& | ^ << >>按位计算
赋值运算符= += -= *= /= %= &= |= ^= <<= >>=赋值操作
指针运算符& *取地址、解引用
其它运算符, . () []逗号、结构体访问、函数调用、数组索引

2. 算术运算符

Go 语言支持常见的算术运算:

a, b := 10, 3

fmt.Println(a + b)  // 加法:13
fmt.Println(a - b)  // 减法:7
fmt.Println(a * b)  // 乘法:30
fmt.Println(a / b)  // 除法(整数):3
fmt.Println(a % b)  // 取模(余数):1

注意:

  • / 对整数取整,不会保留小数。
  • 自增(++)和自减(--)不能作为表达式,只能独立使用
a := 5
a++  // 正确 ✅
b := a++  // ❌ 错误,Go 不允许 `b = a++`

3. 关系运算符

关系运算符用于比较两个值,返回布尔值 truefalse

x, y := 5, 10

fmt.Println(x == y)  // false
fmt.Println(x != y)  // true
fmt.Println(x > y)   // false
fmt.Println(x < y)   // true
fmt.Println(x >= y)  // false
fmt.Println(x <= y)  // true

4. 逻辑运算符

逻辑运算符用于布尔类型的逻辑运算:

p, q := true, false

fmt.Println(p && q)  // false(逻辑与)
fmt.Println(p || q)  // true(逻辑或)
fmt.Println(!p)      // false(逻辑非)

短路特性(Short-circuiting)

  • &&:若左侧为 false,右侧不会执行。
  • ||:若左侧为 true,右侧不会执行。

5. 位运算符

位运算符用于按位操作整数:

a, b := 5, 3 // 5: 101, 3: 011

fmt.Println(a & b)  // 1  (按位与)
fmt.Println(a | b)  // 7  (按位或)
fmt.Println(a ^ b)  // 6  (按位异或)
fmt.Println(a << 1) // 10 (左移一位,相当于乘 2)
fmt.Println(a >> 1) // 2  (右移一位,相当于除 2)

6. 赋值运算符

运算符作用
=赋值
+= -= *= /= %=复合赋值
&= |= ^= <<= >>=位运算赋值

示例:

a := 10
a += 5  // 等价于 a = a + 5
fmt.Println(a) // 15

7. 指针运算符

运算符作用
&取地址
*取值(解引用)

示例:

var num int = 42
var ptr *int = &num  // 取 num 的地址

fmt.Println(ptr)   // 地址值
fmt.Println(*ptr)  // 42(解引用)

8. 逗号(,)运算符

在多变量赋值时使用:

a, b := 1, 2
a, b = b, a  // 交换变量
fmt.Println(a, b) // 2 1

9. 特殊运算符

(1)点运算符 .

用于访问结构体字段

type Person struct {
    Name string
    Age  int
}
p := Person{Name: "Alice", Age: 25}
fmt.Println(p.Name) // 访问 Name 字段

(2)函数调用 ()

用于调用函数

func greet() {
    fmt.Println("Hello, Go!")
}
greet()  // 调用函数

(3)索引运算符 []

用于访问数组、切片、映射

arr := []int{10, 20, 30}
fmt.Println(arr[1]) // 20

10. 运算符优先级

优先级运算符
1(最高)* / % << >> & &^
2+ - | ^
3== != < <= > >=
4&&
5(最低)||

示例:

result := 10 + 2 * 5 // 先计算 `2*5`,然后加 `10`
fmt.Println(result)   // 20

括号 () 最高优先级

result := (10 + 2) * 5 // 先计算 `10+2`,再乘以 `5`
fmt.Println(result)   // 60

总结

运算符类别运算符示例
算术运算+ - * / % ++ --a + b
关系运算== != > < >= <=a > b
逻辑运算&& || !a && b
位运算& | ^ << >>a & b
赋值运算= += -= *= /= %= &= |= ^= <<= >>=a += 1
指针运算& *ptr = &a
其它运算, . () []a, b = b, a

发表回复 0

Your email address will not be published. Required fields are marked *