golang 结构体嵌套

结构体匿名字段

如果不给结构体声明字段名,那该字段为匿名字段

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

package main

import "fmt"

type User struct {
string
int
}


func main(){
//匿名字段类型不能重复
p1 := User{
"roddy",
18,

}
//直接使用类型访问值即可
fmt.Println(p1,p1.string)
}

结构体嵌套

结构体可以嵌套另一个结构体以作关联,下面以服务器和IDC为例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package main

import "fmt"

type IDC struct {
name string
address string

}

type CloudServer struct {
name string
ip string
cpu int8
disk int32
mem int8
net float32
idc IDC //嵌套另外的结构体
}


func main(){
s1 := CloudServer{
"webserver",
"10.10.1.1",
4,
500,
8,
8,
IDC{
"北京1区",
"北京xxxxx路",
},
}


fmt.Println(s1.idc.name,s1)
fmt.Println(s1.name)

}

匿名嵌套结构体

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

type IDC struct {
name string
address string

}

type CloudServer struct {
name string
ip string
cpu int8
disk int32
mem int8
net float32
IDC //匿名嵌套另外的结构体 不声明字段名
}

func main(){
s1 := CloudServer{
"webserver",
"10.10.1.1",
4,
500,
8,
8,
IDC{
"北京1区",
"北京xxxxx路",
},
}


//fmt.Println(s1.idc.name,s1)
fmt.Println(s1.address) //直接可访问嵌套结构体里的字段 如果嵌套结构体中使用多个重名字段话需要声明访问哪个结构体

}