Go 结构体内存分配机制

    技术2022-07-11  77

    结构体内存分配机制

    我们定义一个Person结构体(包括名字,年龄)我们看看下面一段代码,输出什么内容? var p1 Person p1.Name = "小明" var p2 Person = p1 fmt.Printin(p2.Age) p2.Name = "tom" fmt.Printf("p2.Name=%v p1.Name=%v",p2.Name,p1.Name) 输出的结果是: p2.Name = tom p1.Name = 小明
    结构体在内存中示意图


    看下面代码,并分析原因 type Person struct { Name string Age int } func main() { var p1 Person p1.Age = 10 p1.Name = "小明" var p2 *Person = &p1 fmt.Println((*p2).Age) fmt.Println(p2.Age) p2.Name = "tom~" fmt.Printf("p2.Name=%v p1.Name=%v \n", p2.Name, p1.Name) fmt.Printf("p2.Name=%v p1.Name=%v \n", (*p2).Name, p1.Name) fmt.Printf("p1的地址%p\n", &p1) fmt.Printf("p2的地址%p p2的值%p\n", &p2, p2) } 输出结果:

    内存示意图:

    Processed: 0.009, SQL: 9