gloang之嵌入类型

来源:互联网 发布:ipad淘宝可以看直播吗 编辑:程序博客网 时间:2024/06/10 00:31

嵌入类型是将已有的类型直接声明在新的结构类型中,被嵌入的类型被称为外部类型的内部类型,通过嵌入类型,与内部类型相关的标识符会提升到外部类型上

package mainimport (    "bytes"    "encoding/binary"    "fmt")type User struct {    Name int32    Age  int32}type Admin struct {    User    Sex int32}func (u *User) Encode() []byte {    buf := new(bytes.Buffer)    err := binary.Write(buf, binary.LittleEndian, u)    if err != nil {        fmt.Println("binary.Write failed:", err)    }    return buf.Bytes()}func (u *User) Decode(b []byte) {    buf := bytes.NewBuffer(b)    err := binary.Read(buf, binary.LittleEndian, u)    if err != nil {        fmt.Println("binary.Read failed:", err)    }}func main() {    a := Admin{        User: User{            Name: 2001,            Age:  23,        },        Sex: 1,    }    buf := a.User.Encode()    a.User.Decode(buf)    fmt.Println(buf)    fmt.Println(a)    buff := a.Encode()    a.Decode(buff)    fmt.Println(buff)    fmt.Println(a)}

如上例所示,内部类型User是外部类型Admin的内部类型,此时,内部类型User的所有标识符都会提升到外部类型上(包括变量和函数)
通过外部类型直接调用函数
如上所示调用,由于外部类型并未实现该方法,因此内部类型的标识符(函数)被提升到外部类型,通过外部类型调用,和通过内部类型调用的结果相同,如下所示
通过内部类型调用
显示结果如下
结果显示
github路径

原创粉丝点击