运算符与表达式 -《Go语言实战指南》

简介: 本章全面介绍Go语言中的运算符及其使用方法。内容涵盖算术、赋值、比较、逻辑、位运算符等类型,结合示例解析其功能与应用场景。此外,还详细说明了运算符的优先级与结合性规则,并强调通过括号提升代码可读性。最后指出Go不支持运算符重载,位运算适用于性能优化场景,帮助开发者高效掌握表达式构建技巧。

 

Go 语言提供了一整套简洁且强大的运算符,用于数值计算、逻辑判断、赋值操作等。本章将带你系统了解 Go 中各类运算符及其组合表达式的使用方法。


一、运算符分类总览

运算符类型 示例 说明
算术运算符 + - * / % 加减乘除取余
赋值运算符 = += -= *= /= %= 基础赋值与复合赋值
比较运算符 == != > < >= <= 常用于条件判断
逻辑运算符 `&& !` 与、或、非(布尔运算)
位运算符 `& ^ &^ << >>` 位与、或、异或、位清零等
其他运算符 &* <- <-chan 指针、通道等相关运算符

二、算术运算符

a := 10
b := 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

注意:整数除法会自动舍去小数部分,使用浮点数可保留精度。


三、赋值运算符

Go 支持基础赋值和复合赋值:

x := 5
x += 3 // 等价于 x = x + 3
x *= 2 // 等价于 x = x * 2

可用运算符包括:+= -= *= /= %=


四、比较运算符

a := 5
b := 10
fmt.Println(a == b) // false
fmt.Println(a != b) // true
fmt.Println(a < b)  // true
fmt.Println(a >= b) // false
  • • 用于数值、布尔值、字符串、数组等的比较;
  • • 不支持对 map、slice、function 进行直接比较。

五、逻辑运算符(布尔逻辑)

x := true
y := false
fmt.Println(x && y) // false
fmt.Println(x || y) // true
fmt.Println(!x)     // false
  • &&:逻辑与,两个都为真才为真;
  • ||:逻辑或,任一为真即为真;
  • !:逻辑非,取反。

六、位运算符(适用于整数类型)

a := 5  // 0101
b := 3  // 0011
fmt.Println(a & b)  // 1 (0001)
fmt.Println(a | b)  // 7 (0111)
fmt.Println(a ^ b)  // 6 (0110)
fmt.Println(a &^ b) // 4 (0100) 清除 b 中为 1 的位
fmt.Println(a << 1) // 10(左移)
fmt.Println(a >> 1) // 2 (右移)

七、自增与自减(Go 1.14 起不可作为表达式)

i := 0
i++ // 等价于 i = i + 1
i-- // 等价于 i = i - 1

注意:Go 中 i++ 不能写在赋值语句或表达式中,如 j := i++ 是非法的。


八、优先级与结合性

优先级(从高到低) 运算符
1 * / % << >> & &^
2 `+ - ^`
3 == != < <= > >=
4 &&
5 ` `
6 赋值运算符(如 = += -=

建议使用括号明确优先级,提升可读性。


九、表达式的使用场景

// 条件判断
if x > 0 && x < 100 {
    fmt.Println("x 在区间 (0,100) 内")
}
// 赋值表达式
a := 3
a *= 2 + 1 // 等价于 a = a * (2 + 1)

十、小结

  • • 运算符是表达式的基本构建单元,需熟练掌握;
  • • Go 不支持运算符重载;
  • • 使用括号提高表达式清晰度;
  • • 位运算适用于性能敏感或底层编程场景。

 

相关文章
|
自然语言处理 测试技术 编译器
Go语言实现表达式求值器的秘密都在这里!
Go语言实现表达式求值器的秘密都在这里!
242 0
go语言编译时常量表达式
【10月更文挑战第20天】
144 3
|
安全 Go C语言
Go常量的定义和使用const,const特性“隐式重复前一个表达式”,以及iota枚举常量的使用
这篇文章介绍了Go语言中使用`const`定义常量的方法,包括常量的特性“隐式重复前一个表达式”,以及如何使用`iota`实现枚举常量的功能。
|
存储 缓存 Java
涨姿势啦!Go语言中正则表达式初始化的最佳实践
在Go语言中,正则表达式是处理字符串的强大工具,但其编译过程可能消耗较多性能。本文探讨了正则表达式编译的性能影响因素,包括解析、状态机构建及优化等步骤,并通过示例展示了编译的时间成本。为了优化性能,推荐使用预编译策略,如在包级别初始化正则表达式对象或通过`init`函数进行错误处理。此外,简化正则表达式和分段处理也是有效手段。根据初始化的复杂程度和错误处理需求,开发者可以选择最适合的方法,以提升程序效率与可维护性。
223 0
涨姿势啦!Go语言中正则表达式初始化的最佳实践
|
Java Go 区块链
【Go语言专栏】Go语言中的运算符和表达式
【4月更文挑战第30天】Go语言是Google开发的编程语言,因其简单易学、高性能和出色的并发处理能力而备受关注,常用于云计算、微服务等领域。本文介绍了Go语言中的运算符和表达式,包括算术运算符(如加、减、乘、除、取模)、关系运算符(如等于、不等于、大于、小于等)、逻辑运算符(如逻辑与、或、非)以及位运算符(如按位与、或、异或、移位)。通过示例代码展示了这些运算符的使用方法。
193 1
|
存储 分布式计算 算法
GO学习笔记之表达式
GO学习笔记之表达式
183 1
go语言中的运算符和表达式与对应的优先级
go语言中的运算符和表达式与对应的优先级
268 0
|
Go
Go语句与表达式深度解析:全案例手册
Go语句与表达式深度解析:全案例手册
176 0
|
存储 分布式计算 算法