当前位置:网站首页>嵌入struct和嵌入interface

嵌入struct和嵌入interface

2022-06-21 12:00:00 attempt_to_do

嵌入struct

当匿名字段是一个struct的时候,那么这个struct所拥有的全部字段都被隐式地引入了当前定义的这个struct。


package main
import "fmt"
type Human struct {
    
    name string
    age int
    weight int
}
type Student struct {
    
    Human  // 匿名字段,那么默认Student就包含了Human的所有字段
    speciality string
}
func main() {
    
    // 我们初始化一个学生
    mark := Student{
    Human{
    "Mark", 25, 120}, "Computer Science"}
    // 我们访问相应的字段
    fmt.Println("His name is ", mark.name)
    fmt.Println("His age is ", mark.age)
    fmt.Println("His weight is ", mark.weight)
    fmt.Println("His speciality is ", mark.speciality)
    // 修改对应的备注信息
    mark.speciality = "AI"
    fmt.Println("Mark changed his speciality")
    fmt.Println("His speciality is ", mark.speciality)
    // 修改他的年龄信息
    fmt.Println("Mark become old")
    mark.age = 46
    fmt.Println("His age is", mark.age)
    // 修改他的体重信息
    fmt.Println("Mark is not an athlet anymore")
    mark.weight += 60
    fmt.Println("His weight is", mark.weight)
}

嵌入interface

Go里面真正吸引人的是它内置的逻辑语法,就像我们在学习Struct时学习的匿名字段,多么的优雅啊,那么相同的逻辑引入到interface里面,那不是更加完美了。如果一个interface1作为interface2的一个嵌入字段,那么interface2隐式的包含了interface1里面的method。

我们可以看到源码包container/heap里面有这样的一个定义


type Interface interface {
    
    sort.Interface //嵌入字段sort.Interface
    Push(x interface{
    }) //a Push method to push elements into the heap
    Pop() interface{
    } //a Pop elements that pops elements from the heap
}

我们看到sort.Interface其实就是嵌入字段,把sort.Interface的所有method给隐式的包含进来了。也就是下面三个方法:


type Interface interface {
    
    // Len is the number of elements in the collection.
    Len() int
    // Less returns whether the element with index i should sort
    // before the element with index j.
    Less(i, j int) bool
    // Swap swaps the elements with indexes i and j.
    Swap(i, j int)
}
原网站

版权声明
本文为[attempt_to_do]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_43021844/article/details/121307178