gloang之嵌入类型

本文介绍了一种在Go语言中使用嵌入式结构的方法,通过将一个结构体嵌入到另一个结构体中,使得外部结构体可以访问并使用内部结构体的所有字段和方法。以User和Admin两个结构体为例,演示了如何通过外部结构体调用内部结构体的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

package main

import (
    "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路径

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值