Go 语言的变量shadowing的作用是什么呢?如何检测 shadowing 变量?

题目描述

package main

import (
    "fmt"
)

func main() {
    x := 0

    fmt.Println("Before the decision block, x:", x)

    if true {
        x := 1
        x++
    }

    fmt.Println("After the decision block, x:", x)
}

image.png

在上面的程序中,语句 x :=1 声明了一个新的变量,它在整个 if 语句的范围内对原来的 x 进行影射。因此,在 if 语句中声明的这个变量 x 被称为变量 shadowing 。

相关代码

如果我们想重用外部块中的实际变量 x,那么在 if 语句中,改为写入 x = 1。

package main

import (
    "fmt"
)

func main() {
    x := 0

    fmt.Println("Before the decision block, x:", x)

    if true {
        // x := 1
        x = 1
        x++
    }

    fmt.Println("After the decision block, x:", x)
}

image.png

问题是:这样的 shadowing 变量有什么作用呢?如何检测这样的变量是否在代码中存在?

本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
回复
阅读 274
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏