在 Go 语言中,赋值运算符用于将值赋给变量。除了基本的赋值运算符之外,Go 还提供了一些复合赋值运算符,它们可以将运算与赋值结合在一起。以下是 Go 语言中的赋值运算符及其用法:

1. 基本赋值运算符

  • 赋值运算符 (=)
    • 用途:将右侧的值赋给左侧的变量。
    • 示例
      package main
      
      import "fmt"
      
      func main() {
          var x int
          x = 10
          fmt.Println("x =", x) // 输出: x = 10
      }
      

2. 复合赋值运算符

这些运算符结合了运算和赋值操作,使代码更简洁。

  1. 加法赋值 (+=)

    • 用途:将右侧的值加到左侧的变量上,然后将结果赋给左侧的变量。
    • 示例
      package main
      
      import "fmt"
      
      func main() {
          a := 5
          a += 3 // 等价于 a = a + 3
          fmt.Println("a += 3:", a) // 输出: a += 3: 8
      }
      
  2. 减法赋值 (-=)

    • 用途:将右侧的值从左侧的变量中减去,然后将结果赋给左侧的变量。
    • 示例
      package main
      
      import "fmt"
      
      func main() {
          a := 10
          a -= 4 // 等价于 a = a - 4
          fmt.Println("a -= 4:", a) // 输出: a -= 4: 6
      }
      
  3. 乘法赋值 (*=)

    • 用途:将左侧的变量与右侧的值相乘,然后将结果赋给左侧的变量。
    • 示例
      package main
      
      import "fmt"
      
      func main() {
          a := 3
          a *= 4 // 等价于 a = a * 4
          fmt.Println("a *= 4:", a) // 输出: a *= 4: 12
      }
      
  4. 除法赋值 (/=)

    • 用途:将左侧的变量除以右侧的值,然后将结果赋给左侧的变量。
    • 示例
      package main
      
      import "fmt"
      
      func main() {
          a := 20
          a /= 5 // 等价于 a = a / 5
          fmt.Println("a /= 5:", a) // 输出: a /= 5: 4
      }
      
  5. 取余赋值 (%=)

    • 用途:将左侧的变量对右侧的值取余,然后将结果赋给左侧的变量。
    • 示例
      package main
      
      import "fmt"
      
      func main() {
          a := 17
          a %= 5 // 等价于 a = a % 5
          fmt.Println("a %= 5:", a) // 输出: a %= 5: 2
      }
      
  6. 按位与赋值 (&=)

    • 用途:对左侧的变量和右侧的值进行按位与操作,然后将结果赋给左侧的变量。
    • 示例
      package main
      
      import "fmt"
      
      func main() {
          a := 12 // 二进制: 1100
          b := 7  // 二进制: 0111
          a &= b  // 等价于 a = a & b
          fmt.Println("a &= b:", a) // 输出: a &= b: 4(二进制: 0100)
      }
      
  7. 按位或赋值 (|=)

    • 用途:对左侧的变量和右侧的值进行按位或操作,然后将结果赋给左侧的变量。
    • 示例
      package main
      
      import "fmt"
      
      func main() {
          a := 12 // 二进制: 1100
          b := 7  // 二进制: 0111
          a |= b  // 等价于 a = a | b
          fmt.Println("a |= b:", a) // 输出: a |= b: 15(二进制: 1111)
      }
      
  8. 按位异或赋值 (^=)

    • 用途:对左侧的变量和右侧的值进行按位异或操作,然后将结果赋给左侧的变量。
    • 示例
      package main
      
      import "fmt"
      
      func main() {
          a := 12 // 二进制: 1100
          b := 7  // 二进制: 0111
          a ^= b  // 等价于 a = a ^ b
          fmt.Println("a ^= b:", a) // 输出: a ^= b: 11(二进制: 1011)
      }
      
  9. 左移赋值 (<<=)

    • 用途:将左侧的变量的位向左移动右侧指定的位数,然后将结果赋给左侧的变量。
    • 示例
      package main
      
      import "fmt"
      
      func main() {
          a := 3 // 二进制: 0011
          a <<= 2 // 等价于 a = a << 2
          fmt.Println("a <<= 2:", a) // 输出: a <<= 2: 12(二进制: 1100)
      }
      
  10. 右移赋值 (>>=)

    • 用途:将左侧的变量的位向右移动右侧指定的位数,然后将结果赋给左侧的变量。
    • 示例
      package main
      
      import "fmt"
      
      func main() {
          a := 12 // 二进制: 1100
          a >>= 2 // 等价于 a = a >> 2
          fmt.Println("a >>= 2:", a) // 输出: a >>= 2: 3(二进制: 0011)
      }
      

总结

  • 赋值运算符 用于将值赋给变量,包括:
    • 基本赋值运算符 (=)
    • 复合赋值运算符(加法赋值 +=,减法赋值 -=,乘法赋值 *=, 除法赋值 /=, 取余赋值 %=,按位与赋值 &=, 按位或赋值 |=, 按位异或赋值 ^=, 左移赋值 <<=, 右移赋值 >>=

这些运算符使得在处理变量时更为简洁高效,尤其在需要对变量进行运算和赋值的场景中。