Fork me on GitHub

Golang之旅16-嵌套结构体

内容

  • 嵌套结构体
  • 不同的结构体之间的命名冲突
  • 结构体的继承实现

嵌套结构体

一个结构体中可以嵌套包含另一个结构体或结构体指针

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
package main

import "fmt"

type Address struct {
Provice string //字段名称 字段类型
City string
}

type User struct {
Name string
Gender string
Address Address //类型是上面的Address类型
}

// 结构体的匿名字段
type Person struct{
string
int
}

func main(){
user1 := User{ //先定义User类型
Name: "皮皮虾",
Gender: "name",
Address: Address{ //再定义Address类型
Provice: "广东",
City: "深圳",
},
}
fmt.Printf("user=%#v\n", user1)
}

字段名冲突

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
41
42
43
44
45
package main

import "fmt"

//字段名冲突问题

type Address struct {
Province string
City string
CreateTime string
}

type Email struct{
Account string
CreateTime string
}


type Person struct {
Name string
Gender string
Age int
Address
Email
}

func main(){
p1 := Person{
Name: "小明",
Gender: "男",
Age: 18,
Address: Address{
Province: "广东",
City: "深圳",
CreateTime: "2019-09-21",
},
Email: Email{
Account: "pipixia",
CreateTime: "2018-08-09",
},
}
fmt.Printf("%#v\n", p1)
fmt.Println(p1.Address.CreateTime) // 冲突的字段名,必须指明全部的类型名称进行访问
fmt.Println(p1.Email.CreateTime)
}

结构体的继承

使用结构体能够实现继承功能

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
package main

import "fmt"

//结构体的继承

// Animal 动物:自定义一个类
type Animal struct{
name string
}

// 定义一个方法move 传给Animal
// 接收者类型为*Animal,a是接收者变量
func (a *Animal) move(){
fmt.Printf("%s can move\n", a.name)
}

// cat 类型
type Cat struct{
Feet int8
*Animal // 通过嵌套匿名结构体实现继承,嵌套的是指针
}

func (d *Cat) miao() {
fmt.Printf("%s can miao miao\n", d.name)
}

func main(){
d1 := &Cat{ // 不要忘记取址符号
Feet: 4,
Animal: &Animal{
name: "尤尔",
},
}
d1.miao()
d1.move()
}

本文标题:Golang之旅16-嵌套结构体

发布时间:2019年09月21日 - 14:09

原始链接:http://www.renpeter.cn/2019/09/21/Golang%E4%B9%8B%E6%97%8516-%E5%B5%8C%E5%A5%97%E7%BB%93%E6%9E%84%E4%BD%93.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

Coffee or Tea