Go 基础面试题, 不分配内存的指针类型能在 Go 语言中使用吗?
Go 基础面试题, 不分配内存的指针类型能在 Go 语言中使用吗?
QA
Step 1
Q:: 在 Go 语言中,不分配内存的指针类型能使用吗?
A:: 在 Go 语言中,可以声明指针类型而不分配内存空间,但是在使用该指针之前必须初始化。未初始化的指针默认值为 nil,直接使用未初始化的指针会导致程序崩溃(产生 runtime error)。正确的做法是使用 new 或 make 函数分配内存,或者使用 & 操作符获取变量的地址。
Step 2
Q:: Go 中 new 和 make 的区别是什么?
A:: 在 Go 语言中,new 和 make 都用于分配内存,但用途不同。new 只分配内存,并返回指向该内存的指针,内存内容默认初始化为零值。make 则是专门用来初始化并返回引用类型的变量,如 slice、map 和 channel,它不仅分配内存,还会初始化这些类型的数据结构。
Step 3
Q:: 如何避免 Go 语言中的空指针引用错误?
A:: 在 Go 语言中,空指针引用错误可以通过在使用指针前检查其是否为 nil 来避免。此外,确保在声明指针后及时使用 new、make 或 & 操作符初始化指针也是关键。
Step 4
Q:: Go 语言中的 nil 值与其他语言中的 null 有什么区别?
A:: 在 Go 语言中,nil 是一个预定义的标识符,表示接口、函数、指针、map、slice 和 channel 等引用类型的零值。而在许多其他语言中,null 是表示引用类型未指向任何对象的值。Go 中的 nil 只能用于引用类型,并且可以用来检测这些类型是否初始化。
Step 5
Q:: 如何正确使用 Go 语言中的指针类型进行参数传递?
A:: 在 Go 语言中,指针类型的参数传递可以有效避免值传递中的拷贝开销,尤其是在传递大型结构体时。要正确使用指针类型传递参数,需要确保在传递前对指针进行了初始化,并在函数中注意不要直接修改指针本身,而是通过解引用操作符 (*)
修改指针指向的值。