阅读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====runParent()")
}
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.runChild()
	child.InterfaceChild.runParent()
}
InterfaceChild 接口 组合了 InterfaceParent接口
TestStruct结构体实现了 InterfaceParent 和 InterfaceChild 接口

运行结果

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