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自学中心,一起交流。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~