首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >初学者需要注意的问题-变量的作用域

初学者需要注意的问题-变量的作用域

作者头像
李海彬
发布2018-03-22 16:29:50
7120
发布2018-03-22 16:29:50
举报
文章被收录于专栏:Golang语言社区Golang语言社区

go语言支持多变量同时赋值或者初始化,这是一个很方便的特性。它也允许使用:=操作符同时声明部分新变量,并且给已有变量赋值,这会带来一些需要注意的问题,一不小心就产生bug。 看一段代码:

package main

import "fmt"

func main(){

a, b := 1, 2

b, c := 3, 4

fmt.Println(a, b, c)
}

这里“b, c:= 3, 4”语句是给已有变量b赋值,同时把一个新变量c初始化为4,因此程序的输出结果是: 1 3 4 但是如果这行语句是在另外一个代码块里,效果就不一样了。


package main
import "fmt"
func main(){


a, b := 1, 2


if true {



b, c := 3, 4



fmt.Println(b, c)


}

fmt.Println(a, b)

}

这个程序输出的结果是: 3 4 1 2 说明"b, c := 3, 4"语句是初始化了两个新的变量,其中b和外部变量b重名。 所以结论是: 在同一个函数另外一个代码块,使用:=初始化多个变量时,外部同名变量被自动屏蔽。 这个问题还是挺容易遇到的,新手可能不知道,而老手也可能会不留神给忽略了,结果产生bug。如果能有编译警告就好一些,但是还不清楚有没有这样的编译选项。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-08-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Golang语言社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档