2.9. 补充注意事项 6. 当结构体的字段包含引用类型,需要初始化分配内存空间
g g study,d d up!
补充注意事项 6
当结构体的字段包含引用类型,需要初始化分配内存空间
6. 当结构体的字段包含引用类型时,需要在初始化时为引用类型分配内存空间,避免出现空指针异常。
在 Go 中,当一个结构体的字段是引用类型(比如指针、切片、map、channel 等)时,在初始化结构体时,需要为这些引用类型分配内存空间,否则可能会出现空指针异常。这是因为引用类型的默认值为 nil,而 nil 不能被解引用或操作。
下面是一个示例,演示在结构体中使用指针类型的字段时需要为其分配内存空间:
package main
import "fmt"
type Person struct {
Name string
Age int
Job *Job // 使用指针类型的字段
}
type Job struct {
Title string
Salary int
}
func main() {
// 错误示例:没有为 Job 分配内存空间
//var p1 Person
//p1.Name = "Alice"
//p1.Age = 25
//fmt.Println(p1.Name, p1.Age, p1.Job.Title) // 报错:空指针异常
// 正确示例:为 Job 分配内存空间
var p2 Person
p2.Name = "Bob"
p2.Age = 30
p2.Job = &Job{"Engineer", 10000}
fmt.Println(p2.Name, p2.Age, p2.Job.Title, p2.Job.Salary) // 输出:Bob 30 Engineer 10000
}
在上面的示例中,Person
结构体包含了一个指向 Job
结构体的指针类型字段 Job
。如果没有为 Job
分配内存空间,访问 p1.Job.Title
时会出现空指针异常。正确的做法是在初始化 Person
时,为 Job
分配内存空间,并将其地址赋值给 Job
字段。
欢迎关注公众号上海php自学中心,一起交流。