面试题答案
一键面试1. 局部变量作用域
在Go语言中,局部变量的作用域仅限于声明它们的代码块。代码块可以是函数体、for
循环体、if
语句块等。例如:
package main
import "fmt"
func main() {
// 局部变量i,作用域仅限于main函数内
i := 10
if i > 5 {
// 这里可以访问i
j := 20
// j的作用域仅限于这个if语句块内
fmt.Println(j)
}
// fmt.Println(j) // 这里访问j会报错,j超出作用域
fmt.Println(i)
}
2. 全局变量作用域
全局变量的作用域是整个包,即包内的所有源文件都可以访问全局变量。例如:
package main
import "fmt"
// 全局变量g
var g int
func init() {
g = 100
}
func main() {
fmt.Println(g)
}
3. 避免命名冲突
- 函数内部访问全局变量:如果函数内部定义了与全局变量同名的局部变量,在函数内部默认访问的是局部变量。若要访问全局变量,可以使用包名限定。例如:
package main
import "fmt"
var num int = 10
func main() {
num := 20
fmt.Println(num)
fmt.Println(main.num)
}
- 定义局部变量:在定义局部变量时,应遵循良好的命名规范,使用具有描述性的名称,尽量避免与全局变量重名。同时,在复杂的代码结构中,要仔细规划变量的作用域,确保变量名在其作用域内的唯一性。例如,在不同的函数中定义同名的局部变量是允许的,因为它们的作用域不重叠。
package main
import "fmt"
func func1() {
data := "func1 data"
fmt.Println(data)
}
func func2() {
data := "func2 data"
fmt.Println(data)
}
func main() {
func1()
func2()
}