1.结构体 自定义的数据类型 值类型
package main
import "fmt"
type Cat struct {
Name string
Age int
Color string
Hobby string
par *int
m1 map[string] int
s1 [] int
}
func main() {
var cat1 Cat
var cat2 Cat
cat1.Name = "小白"
cat1.Age = 10
cat1.Color = "白色"
cat1.Hobby = "吃"
cat3 := cat1
cat4 := &cat1
fmt.Printf("1.cat1地址:%p;cat2地址:%pN;cat3地址:%p;cat4:%p\n", &cat1, &cat2, &cat3, &cat4)
fmt.Println("2.cat1 name:", cat1.Name, "age:", cat1.Age, "color:", cat1.Color, "hobby:", cat1.Hobby)
fmt.Println("3.cat2 name:", cat2.Name, "age:", cat2.Age, "color:", cat2.Color, "hobby:", cat2.Hobby)
fmt.Println("4.cat3 name:", cat3.Name, "age:", cat3.Age, "color:", cat3.Color, "hobby:", cat3.Hobby)
fmt.Println("5.cat4 name:", cat4.Name, "age:", cat4.Age, "color:", cat4.Color, "hobby:", cat4.Hobby)
cat3.Name = "黑猫"
fmt.Printf("修改cat3的name\n")
fmt.Println("6.cat1 name:", cat1.Name, "age:", cat1.Age, "color:", cat1.Color, "hobby:", cat1.Hobby)
fmt.Println("7.cat3 name:", cat3.Name, "age:", cat3.Age, "color:", cat3.Color, "hobby:", cat3.Hobby)
fmt.Println("8.cat4 name:", cat4.Name, "age:", cat4.Age, "color:", cat4.Color, "hobby:", cat4.Hobby)
cat4.Name = "花猫"
fmt.Printf("修改cat4的name\n")
fmt.Println("9.cat1 name:", cat1.Name, "age:", cat1.Age, "color:", cat1.Color, "hobby:", cat1.Hobby)
fmt.Println("10.cat3 name:", cat3.Name, "age:", cat3.Age, "color:", cat3.Color, "hobby:", cat3.Hobby)
fmt.Println("11.cat4 name:", cat4.Name, "age:", cat4.Age, "color:", cat4.Color, "hobby:", cat4.Hobby)
fmt.Printf("\n")
fmt.Println("12.cat1.m1地址:", &cat1.m1, "cat1.m1值:", cat1.m1)
cat1.m1 = make(map[string]int)
cat1.m1["key1"] = 1
fmt.Println("13.cat1.m1值:", cat1.m1)
fmt.Println( "14.cat1.s1值:", cat1.s1)
cat1.s1 = make([]int, 5, 10)
fmt.Println( "15.cat1.s1值:", cat1.s1)
cat1.s1[0] = 100
fmt.Println( "16.cat1.s1值:", cat1.s1)
cat1.par = new(int)
fmt.Println("17.cat1.par地址:", &cat1.par, "cat1.par值:", *cat1.par)
*cat1.par = 99
fmt.Println("18.cat1.par地址:", &cat1.par, "cat1.par值:", *cat1.par)
}
输出
1.cat1地址:0xc00005a180;cat2地址:0xc00005a1e0N;cat3地址:0xc00005a240;cat4:0xc00000e028
2.cat1 name: 小白 age: 10 color: 白色 hobby: 吃
3.cat2 name: age: 0 color: hobby:
4.cat3 name: 小白 age: 10 color: 白色 hobby: 吃
5.cat4 name: 小白 age: 10 color: 白色 hobby: 吃
修改cat3的name
6.cat1 name: 小白 age: 10 color: 白色 hobby: 吃
7.cat3 name: 黑猫 age: 10 color: 白色 hobby: 吃
8.cat4 name: 小白 age: 10 color: 白色 hobby: 吃
修改cat4的name
9.cat1 name: 花猫 age: 10 color: 白色 hobby: 吃
10.cat3 name: 黑猫 age: 10 color: 白色 hobby: 吃
11.cat4 name: 花猫 age: 10 color: 白色 hobby: 吃
12.cat1.m1地址: &map[] cat1.m1值: map[]
13.cat1.m1值: map[key1:1]
14.cat1.s1值: []
15.cat1.s1值: [0 0 0 0 0]
16.cat1.s1值: [100 0 0 0 0]
17.cat1.par地址: 0xc00005a1b8 cat1.par值: 0
18.cat1.par地址: 0xc00005a1b8 cat1.par值: 99
2.结构体的四种创建总结
package main
import "fmt"
type Cat struct {
Name string
Age int
Color string
Hobby string
par *int
m1 map[string] int
s1 [] int
}
func main() {
var cat1 Cat
cat1.Name = "小白"
cat1.Age = 10
cat1.Color = "白色"
cat1.Hobby = "吃"
cat2 := Cat{}
cat2.Name = "小黑"
var cat3 *Cat = new(Cat)
(*cat3).Name = "小黄"
var cat4 *Cat = &Cat{}
(*cat4).Name = "小绿"
fmt.Printf("cat1地址%p\ncat2地址%p\ncat3地址%p\ncat4地址%p\n", &cat1, &cat2, &cat3, &cat4)
fmt.Println("\n1.cat1 name:", cat1.Name)
fmt.Println("2.cat2 name:", cat2.Name)
fmt.Println("3.cat3 name:", cat3.Name)
fmt.Println("4.cat4 name:", cat4.Name)
}
输出
cat1地址0xc000052180
cat2地址0xc0000521e0
cat3地址0xc00000e028
cat4地址0xc00000e030
1.cat1 name: 小白
2.cat2 name: 小黑
3.cat3 name: 小黄
4.cat4 name: 小绿