嵌入类型是将已有的类型直接声明在新的结构类型中,被嵌入的类型被称为外部类型的内部类型,通过嵌入类型,与内部类型相关的标识符会提升到外部类型上
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路径
本文介绍了一种在Go语言中使用嵌入式结构的方法,通过将一个结构体嵌入到另一个结构体中,使得外部结构体可以访问并使用内部结构体的所有字段和方法。以User和Admin两个结构体为例,演示了如何通过外部结构体调用内部结构体的方法。

被折叠的 条评论
为什么被折叠?



