MST

星途 面试题库

面试题:Go标识符作用域与重名处理

在Go语言中,假设在一个包的不同函数里定义了相同名称的局部变量,程序能否正常编译运行?如果在一个函数内部先定义了一个局部变量,之后又在该函数内的一个子代码块中定义了同名变量,会发生什么?请解释并举例说明。
28.1万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
  1. 在包的不同函数里定义相同名称的局部变量
    • 能否正常编译运行:程序可以正常编译运行。在Go语言中,函数是独立的作用域,不同函数内的局部变量即使名称相同,它们之间也相互独立,不会产生冲突。
    • 示例
package main

import "fmt"

func func1() {
    num := 10
    fmt.Println("func1中的num:", num)
}

func func2() {
    num := 20
    fmt.Println("func2中的num:", num)
}

func main() {
    func1()
    func2()
}

运行结果:

func1中的num: 10
func2中的num: 20
  1. 在一个函数内部先定义一个局部变量,之后又在该函数内的一个子代码块中定义同名变量
    • 发生什么:在Go语言中,这种情况是允许的。在子代码块中定义的同名变量会遮蔽外部代码块中的同名变量。当离开子代码块时,外部的同名变量又重新可见。
    • 示例
package main

import "fmt"

func main() {
    num := 10
    fmt.Println("外部的num:", num)
    {
        num := 20
        fmt.Println("子代码块中的num:", num)
    }
    fmt.Println("离开子代码块后,外部的num:", num)
}

运行结果:

外部的num: 10
子代码块中的num: 20
离开子代码块后,外部的num: 10