从一个现有的非 interface 类型创建新类型时,并不会继承

2020-03-17  本文已影响0人  anthonydan

三个知识点:
1.非interface类型创建的新类型,不会继承方法。
2.非interface类型可以通过结构体,匿名字段的实行,继承方法。
3.interface类型的创建的新类型,继承方法。

从一个现有的非 interface 类型创建新类型时,并不会继承原有的方法:

// 定义 Mutex 的自定义类型
type myMutex sync.Mutex

func main() {
var mtx myMutex
mtx.Lock()
mtx.UnLock()
}
mtx.Lock undefined (type myMutex has no field or method Lock)…

如果你需要使用原类型的方法,可将原类型以匿名字段的形式嵌到你定义的新 struct 中:

// 类型以字段形式直接嵌入
type myLocker struct {
sync.Mutex
}

func main() {
var locker myLocker
locker.Lock()
locker.Unlock()
}
interface 类型声明也保留它的方法集:

type myLocker sync.Locker

func main() {
var locker myLocker
locker.Lock()
locker.Unlock()
}

上一篇 下一篇

猜你喜欢

热点阅读