← Backend / Go / 基础专题

04_变量声明与作用域

使用 `var`、`:=` 和多重赋值,避免变量遮蔽。

Go 基础专题 04:变量声明与作用域

学习目标:使用 var、:= 和多重赋值,避免变量遮蔽。

核心知识

var count int 声明零值,var count int = 2 显式指定类型和值,var count = 2 由编译器推断类型。函数内可以写 count := 2;短变量声明不能出现在函数外。:= 左侧在当前作用域至少要有一个新变量。赋值 = 修改已有变量,二者不要混淆。

package main

import "fmt"

func main() {
    count := 1
    count = count + 1
    name, age := "Ada", 20
    name, age = "Lin", age + 1
    fmt.Println(count, name, age)
}

作用域由代码块决定。内层可以声明同名变量,但这会遮蔽外层名字。常见错误是 value, err := work() 在内层重新声明了 err,外层 err 仍是旧值。阅读时要关注花括号和 := 所在位置。包级变量可被包内多个文件访问,但共享可变状态会增加测试难度。

多重赋值会先计算右边再统一赋值,因此 a, b = b, a 可交换值。空白标识符 _ 用来明确丢弃返回值,但错误一般不应无理由丢弃。

逐步理解

判断 := 是否能用时,先看当前花括号内是否至少出现一个新名字。内层 if 中声明的同名变量是新变量,离开块后外层变量并未改变。遇到难懂的短声明,可把它改写成显式 var 与 =,再逐行跟踪绑定。返回的 err 不应因为 _ 方便就直接丢弃。

动手练习

练习:交换 a=3、b=5 后打印。答案:a, b = b, a,结果为 5 3。