

新闻资讯
技术学院在go中,使用短变量声明(:=)接收多返回值时,变量作用域为所在函数块,且重复声明仅赋值不创建新变量。
Go语言中,函数的返回值本身没有“作用域”概念——它们是临时值,立即被赋给左侧变量。真正具有作用域的是接收返回值的变量,其生命周期由声明方式决定。
在你的示例中:
func main() {
a, b := addMulti(1, 2) // 第一次声明:a 和 b 均为新变量,作用域始于该行,覆盖整个 main 函数体
fmt.Printf("%d %d\n", a, b)
c, b := addMulti(3, 4) // 第二次:c 是新变量;b 已存在且类型匹配(int),因此仅执行赋值,不重新声明
fmt.Printf("%d %d\n", c, b)
}根据 Go语言规范,短变量声明 := 允许重声明(redeclaration),但需满足三个条件:
有一个非空白变量(_)是全新声明的(此处 c 满足该条件)。因此,b 的作用域从首次 := 出现处开始,持续到 main() 函数结束——它始终是同一个变量,第二次 c, b := ... 仅更新其值为 3 * 4 = 12,而非创建新变量。
立即学习“go语言免费学习笔记(深入)”;
⚠️ 注意事项:
总结:Go 中变量作用域由声明位置决定,而非返回值来源;短变量声明的“重声明”机制是作用域与赋值语义的协同设计,既保证简洁性,又避免隐式变量泄漏。