一架梯子,一头程序猿,仰望星空!
Golang程序设计教程(2024版) > 内容正文

Go运算符


1 Golang运算符概述

在Go语言中,运算符用于执行程序代码运算,包括算术运算、关系比较、逻辑运算等。不同的运算符对应不同的功能和使用场景。理解和熟练掌握这些运算符是进行有效编程的基础。

2 算术运算符

Go语言提供了一组用于算术运算的运算符:

  • 加(+):加法运算
  • 减(-):减法运算
  • 乘(*):乘法运算
  • 除(/):除法运算
  • 余数(%):取模运算

示例:

package main

import "fmt"

func main() {
    // 加法运算
    sum := 10 + 5
    fmt.Println("10 + 5 =", sum) // 输出 15

    // 减法运算
    diff := 10 - 5
    fmt.Println("10 - 5 =", diff) // 输出 5

    // 乘法运算
    prod := 10 * 5
    fmt.Println("10 * 5 =", prod) // 输出 50

    // 除法运算
    quot := 10 / 5
    fmt.Println("10 / 5 =", quot) // 输出 2

    // 余数运算
    rem := 10 % 5
    fmt.Println("10 % 5 =", rem) // 输出 
}

3 逻辑运算符

逻辑运算符在Go语言中用于连接多个条件(一般用于布尔值)。它包括与(&&)、或(||)和非(!)三种。

3.1 与(&&)

当所有条件同时为 true 时,"与"运算的结果才为 true

示例:

package main

import "fmt"

func main() {
    fmt.Println(true && true)   // 输出 true
    fmt.Println(true && false)  // 输出 false
    fmt.Println(false && false) // 输出 false
    // 只有两个条件都为真,结果才是真
}

3.2 或(||)

只要有一个条件为 true,"或"运算的结果就为 true

示例:

package main

import "fmt"

func main() {
    fmt.Println(true || true)   // 输出 true
    fmt.Println(true || false)  // 输出 true
    fmt.Println(false || false) // 输出 false
    // 只要有一个条件为真,结果就是真
}

3.3 非(!)

用于反转条件的布尔值。

示例:

package main

import "fmt"

func main() {
    fmt.Println(!true)  // 输出 false
    fmt.Println(!false) // 输出 true
    // 反转布尔值
}

4 比较运算符

比较运算符在Go语言中用于比较两个变量或值:

  • 等于(==)
  • 不等于(!=)
  • 大于(>)
  • 小于(<)
  • 大于等于(>=)
  • 小于等于(<=)

比较运算的结果是布尔值:truefalse

5 位运算符

在Go中,位运算符允许我们直接操作数据的二进制位:

  • 位与(&)
  • 位或(|)
  • 位异或(^)
  • 位左移(<<)
  • 位右移(>>)

位运算符主要用于低级编程,如直接硬件操作、加密等场景。

6 赋值运算符

赋值运算符用于给变量分配值。在Go语言中,赋值运算符有多种形式:

  • 简单赋值(=)
  • 加等(+=)
  • 减等(-=)
  • 乘等(*=)
  • 除等(/=)
  • 余等(%=)

这些运算符使得编码更加简洁,例如,x += 1 等价于 x = x + 1

7 特殊运算符

7.1 递增(++)和递减(--)

递增运算符(++)和递减运算符(--)分别用于将变量的值加1和减1。它们是Go语言中唯一可以作用于变量本身的运算符(不能作用于表达式)。

示例:

package main

import "fmt"

func main() {
    x := 1
    x++
    fmt.Println("x++ =", x) // 输出 2

    y := 10
    y--
    fmt.Println("y-- =", y) // 输出 9
}

注意在Go语言中,x++x-- 不能作为表达式的一部分。例如,不允许 z := x++

7.2 类型转换

Go语言是静态类型的语言,意味着变量一经声明,其类型就不能改变。因此,有时需要将一个类型的变量转换成另一个类型。Go没有自动类型转换,需要显式进行类型转换。

示例:

package main

import (
	"fmt"
)

func main() {
	var i int = 42
	fmt.Println(float64(i)) // 将 int 转换成 float64

	var f float64 = 3.14
	fmt.Println(int(f)) // 将 float64 转换为 int,将丢失小数部分
}

在做类型转换时必须小心,确保转换过程中数据是安全的,比如在将浮点数转换为整数时可能会丢失精度。