Golang中 struct和interface 嵌套组合

阅读pitaya的代码中 发现代码中有相当多的struct 组合 interface

上边日子中就是  TCPAcceptor 这个struct中组合了一个 net.Listener 类型的listener   而net.Listener是一个接口类型

tcpPlayerConn 这个struct里边组合了一个 interface类型的Conn

TcpAcceptor 类型的对象a,a.listener.Accept(),因为不是匿名的,所以要用a.listenter.xxxxx

tcpPlayerConn 类型的对象,可以直接去调用Conn接口里边的方法,

package main

import "fmt"

type InterfaceParent interface {
	runParent()
}

type InterfaceChild interface {
	InterfaceParent
	runChild()
}

type StructParent struct {
	name string
}

func NewStructParent(name string) *StructParent {
	return &StructParent{name: name}
}

type StructChild struct {
	InterfaceChild
	*StructParent
	age int
}

func NewStructChild(ic InterfaceChild, sp *StructParent, age int) *StructChild {
	return &StructChild{
		InterfaceChild: ic,
		StructParent:   sp,
		age:            age,
	}
}

type TestStruct struct {
}

func NewTestStruct() *TestStruct {
	return &TestStruct{}
}
func (t *TestStruct) runParent() {
	fmt.Println("TestStruct====runParent()")
}
func (t *TestStruct) runChild() {
	fmt.Println("TestStruct====runChild()")
}
func main() {
	test := NewTestStruct()
	parent := NewStructParent("hanmeimei")
	child := NewStructChild(test, parent, 10)
	fmt.Println(child.name, child.age)
	child.runParent()
	child.runChild()
	fmt.Println("##################################")
	child.InterfaceChild.runParent()
	child.InterfaceChild.runChild()
}
InterfaceChild 接口 组合了 InterfaceParent接口
TestStruct结构体实现了 InterfaceParent 和 InterfaceChild 接口

运行结果

hanmeimei 10
TestStruct====runParent()
TestStruct====runChild()
##################################
TestStruct====runParent()
TestStruct====runChild()
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值