先看一段go代码

结果:

之前是做PHP的,没太在意变量作用域的问题。在goland IDE中 看到if里面的b变色 也一直没在意,
直到看到这段简单的演示才发现 原来里外b变量是不一样的,和JavaScript中的let声明一样,
相当于是重新声明了一个局部变量 跟外面虽然重名,但作用域不同 互相不影响

可能会引发的问题是:
var err error
defer func() {
if err != nil {
fmt.Println("defer err")
}
}()
if true {
err := errors.New("sdfsdf")
if err != nil {
fmt.Println("if err")
}
}
只会打印 if err 不会打印defer里面的