Go基础_1_38 结构体是指类型

Tutorial: Go初级 Category: Go Published: 2026-04-07 13:58:26 Views: 21 Likes: 0 Comments: 0
package main

import "fmt"

type Person struct {
    name    string
    age     int
    sex     string
    address string
}

func main() {
    /*
        数据类型:
            值类型:int,float,bool,string,array,struct

            引用类型:slice,map,function,pointer


        通过指针:
            new(),不是nil,空指针
                指向了新分配的类型的内存空间,里面存储的零值。
    */

    // 1.结构体是值类型
    p1 := Person{"王二狗", 30, "男", "北京市"}
    fmt.Println(p1)
    fmt.Printf("%p,%T\n", &p1, p1) // 0xc0000d6000,main.Person

    p2 := p1
    fmt.Println(p2)
    fmt.Printf("%p,%T\n", &p2, p2) // 0xc0000d60c0,main.Person

    p2.name = "李小花"
    fmt.Println(p2) // {李小花 30 男 北京市}
    fmt.Println(p1) // {王二狗 30 男 北京市}

    // 2.定义结构体指针
    var pp1 *Person
    pp1 = &p1
    fmt.Println(pp1)                // &{王二狗 30 男 北京市}
    fmt.Printf("%p,%T\n", pp1, pp1) // 0xc0000d6000,*main.Person
    fmt.Println(*pp1)               // {王二狗 30 男 北京市}

    //(*pp1).name = "李四"
    pp1.name = "王五"
    fmt.Println(pp1) // &{王五 30 男 北京市}
    fmt.Println(p1)  // {王五 30 男 北京市}

    // 使用内置函数new(),go语言中专门用于创建某种类型的指针的函数
    pp2 := new(Person)
    fmt.Printf("%T\n", pp2) // *main.Person
    fmt.Println(pp2)        // &{ 0  }
    //(*pp2).name
    pp2.name = "Jerry"
    pp2.age = 20
    pp2.sex = "男"
    pp2.address = "上海市"
    fmt.Println(pp2) // &{Jerry 20 男 上海市}

    pp3 := new(int)
    fmt.Println(pp3)  // 0xc0000aa0a0
    fmt.Println(*pp3) // 0
}