1 package main
2
3 import "fmt"
4
5 type Person struct {
6 name string
7 age int
8 sex string
9 address string
10 }
11
12 func main() {
13 /*
14 数据类型:
15 值类型:int,float,bool,string,array,struct
16
17 引用类型:slice,map,function,pointer
18
19
20 通过指针:
21 new(),不是nil,空指针
22 指向了新分配的类型的内存空间,里面存储的零值。
23 */
24
25 // 1.结构体是值类型
26 p1 := Person{"王二狗", 30, "男", "北京市"}
27 fmt.Println(p1)
28 fmt.Printf("%p,%T\n", &p1, p1) // 0xc0000d6000,main.Person
29
30 p2 := p1
31 fmt.Println(p2)
32 fmt.Printf("%p,%T\n", &p2, p2) // 0xc0000d60c0,main.Person
33
34 p2.name = "李小花"
35 fmt.Println(p2) // {李小花 30 男 北京市}
36 fmt.Println(p1) // {王二狗 30 男 北京市}
37
38 // 2.定义结构体指针
39 var pp1 *Person
40 pp1 = &p1
41 fmt.Println(pp1) // &{王二狗 30 男 北京市}
42 fmt.Printf("%p,%T\n", pp1, pp1) // 0xc0000d6000,*main.Person
43 fmt.Println(*pp1) // {王二狗 30 男 北京市}
44
45 //(*pp1).name = "李四"
46 pp1.name = "王五"
47 fmt.Println(pp1) // &{王五 30 男 北京市}
48 fmt.Println(p1) // {王五 30 男 北京市}
49
50 // 使用内置函数new(),go语言中专门用于创建某种类型的指针的函数
51 pp2 := new(Person)
52 fmt.Printf("%T\n", pp2) // *main.Person
53 fmt.Println(pp2) // &{ 0 }
54 //(*pp2).name
55 pp2.name = "Jerry"
56 pp2.age = 20
57 pp2.sex = "男"
58 pp2.address = "上海市"
59 fmt.Println(pp2) // &{Jerry 20 男 上海市}
60
61 pp3 := new(int)
62 fmt.Println(pp3) // 0xc0000aa0a0
63 fmt.Println(*pp3) // 0
64 }