Golang 的嵌套结构体提高代码复用性【继承】
一:结构体中嵌套一个结构体
import "fmt"
type Test struct{
Name string
age int
int
}
type Test1 struct{
Test //匿名函数中的大小写都能访问到对应的属性或者方法
}
func(a *Test)getAttrbute(){
}
func(a *Test)GetAttrbute1(){
}
func main(){
var a Test1
fmt.Println(a.Test.getAttrbute(),
a.Test.Name,
a.Test.getAttrbute1(),
a.Test.age)
//可以简化为
fmt.Println(a.getAttrbute(),
a.Name,
a.getAttrbute1(),
a.age)
}
注意:
1.匿名函数中的大小写都能访问到对应的属性或者方法
2.当结构体和匿名结构体存在相同的字段或者方法时,利用就近原则取值
执行流程:
先看结构体本身是否存在对应的属性或者方法,如果有就用自己的,如果没有就用匿名结构体中对应的属性或者方法
二:当一个结构体嵌套多个匿名结构体
import "fmt"
type Java struct{
Name string
address string
}
type Python struct{
Name string
attr string
}
type PHP struct{
Java //匿名结构体
Python//匿名结构体
Name string
}
type Golang struct{
j Java //有名结构体【组合关系】
}
func main(){
var p PHP
p.Name = "我是PHP" // 如果 p 没有Name字段,只有 Java 、Python 有Name,这个时候必须通过指定匿名函数结构体名字来区分了
fmt.Println(a.Name)
var g Golang //如果 g 中是一个有名结构体,则访问有名结构体的字段时,必须带上有名结构体的名字 比如:g.j.Name
g.j.Name = = "我是Golang"
}
本文来自博客园,作者:Carver大脸猫,转载请注明原文链接:https://www.cnblogs.com/carver/articles/18452172

浙公网安备 33010602011771号