golang变量作用域问题-避免使用全局变量
最近遇到了一个变量作用域的问题,一个比较低级的问题,可能作为一个熟手不应该犯这样的低级错误,但是golang的语法特点可能让你稍微不注意就踩坑,嘿嘿。 变量作用域全局变量的作用域是整个包,局部变量的作用域是该变量所在的花括号内,这是一个很基础的问题。我们通常会使用golang的一个语法糖 问题看下面的代码,定义了一个全局变量 var t int func init() { t,err := strconv.Atoi("2") if err != nil { log.Fatalln(err) } fmt.Println("init:",t) } func main() { fmt.Println("main:",t) } 输出: init: 2 main: 0 执行之后,在init和main中打印出了不一样的数字,为什么会不一样呢,可能你仔细一看就知道原因了。很简单,init中的t是用 我本想在init中给全局变量t赋值的,却不小心用 解决知道原因之后就容易解决了,我不使用 var t int func init() { var err error t,err = strconv.Atoi("2") if err != nil { log.Fatalln(err) } fmt.Println("init:",t) } 输出: init: 2 main: 2 没有使用 思考这个问题很简单很低级,但是可能一个golang熟手,在代码远比demo要复杂的多的实际项目中,不经意间就可能会犯下这样的错误。 这个问题很难保证说下次一定不会出现的,除非你彻底不用全局变量或者彻底不用
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |