《go语言程序设计》学习(十)

一,自定义类型

这部分看来很久,感觉很难懂,很难掌握关键点。有以下几个概念:

接口嵌入,结构体的聚合与嵌入(嵌入值,嵌入带方法带匿名值,嵌入接口),自由组合的相互独立接口。

嵌套不是继承。

基本的嵌入就不详细说了,这种嵌入带来的效果就是A中嵌入了B,则A相当于自己定义了B点全部内容。

自由组合的相互独立接口,相对于有层次的嵌套,要灵活的多,而且无需保持层次结构,可以自由的添加其他接口。

接口嵌入,还是用一段代码说吧

type optioner interface {
Name() string
IsValid() bool
}

type OptionCommon struct {
ShortName string
LongName string
}

type FloatOption struct {
Optioner  //匿名字段,(接口嵌入,需要具体的类型)
Value float64
}

type GenericOption struct {
OptionCommon  //匿名字段,嵌入
}

func (option GenericOption) Name() string {
return name(option.ShortName, option.LongName)
}
func (option GenericOption) IsValid() bool {
return true
}

func main(){
sizeOption := FloatOption{
    GenericOption{OptionCommon{"s","size"}},12.3}
}

注意看这段代码,定义floatoption的时候,是嵌入的接口,使用的时候,要显式的赋予一个值来满足该接口。(接口说抽象的,无法默认初始化为0)

原文地址:https://www.cnblogs.com/mruoli/p/4713818.html