
go 语言支持类似 python 的并行赋值语法(如 a, b = b, a),无需临时变量,既合法又符合 go 的惯用风格。
go 语言支持类似 python 的并行赋值语法(如 a, b = b, a),无需临时变量,既合法又符合 go 的惯用风格。
在 Go 中,交换两个同类型变量的值非常简洁直观——直接使用多变量并行赋值即可,无需引入临时变量。这种写法不仅语法合法,更是 Go 社区广泛推荐的惯用(idiomatic)方式。
✅ 正确示例
package main
import "fmt"
func main() {
a, b := 10, 20
fmt.Println("交换前:", a, b) // 输出:交换前: 10 20
a, b = b, a // 关键:一行完成交换
fmt.Println("交换后:", a, b) // 输出:交换后: 20 10
}
该语法同样适用于字符串、结构体、自定义类型等——只要左右两侧变量数量一致、类型兼容(即能进行赋值),Go 就会在同一时刻完成所有右侧表达式的求值,再批量赋给左侧变量,从而天然避免中间状态污染。
⚠️ 注意事项
- 类型必须匹配:a 和 b 需为相同类型(或可赋值兼容),否则编译报错;
- 不可用于不同长度的赋值:x, y = 1, 2, 3 会编译失败;
- 不适用于未声明变量的纯赋值:若 a、b 未预先声明,需用 :=(短变量声明);已声明变量则必须用 =;
- 支持多变量扩展:可轻松推广至三元交换(如 a, b, c = b, c, a),逻辑清晰且无副作用。
✅ 总结
Go 的并行赋值机制让变量交换变得安全、简洁、可读性强。相比传统 temp 中转方式,它消除了冗余代码和潜在的命名干扰,是 Go 程序员应当熟练掌握的基础惯用法。











