<>强利用反映判断项的类型:
reflect.TypeOf(项).Implements (reflect.TypeOf(新(comp)) .Elem()),即项目类型是否实现了comp接口类型.TypeOf(新(comp))是一个指针ptr, Elem()将指针转为值。如果该函数返回值为true,则可将项目和v从接口{}强制转为comp接口,调用低(…);当然你也可以使用类型断言,那种方式更简单也更常用的,我在这儿只是尝试一下使用反射的方法:如果v, ok:=项目。(薪酬);好{…}
<强>不能直接对价值类型进行大小比较:
价值类型不能通过“在”与“& lt;“直接比较大小,即使我们知道他是简单类型。作者还没有找到简单的方法能直接转化值为简单类型并比较,因此采用了枚举的方法。若有更简便的方法,也请告知。
<>强如果使用实例指针实现接口:
这是一个比较难以发现的问题,涉及到golang的类型系统。也就是说,如果我们实现Lessthen的方法是这样func (t *敏)不及(x comp) bool,那么很有可能你的断言项目类型就要失败了。我们可以看一下此项目时的类型:
fmt.Println (reflect.TypeOf (t.data [0])),//main.XXX这不是我们期待的,因为我们知道只有* t类型的方法集才是和*年代,而t类型的方法集只有美国很明显,main.XXX的方法集里不包括不及方法,只有*主要。XXX才包括所。以正确的使用方法,是在最初赋值的时候就赋值给指针类型:
mi :=,敏(我) mydata.Push(和mi)<强>多接口分层演示
空接口其实只是一个特殊用例,我们将其推广后即可发现,我们可以定义多个接口,声明多种方法,实体实现了若干种方法便有权限调用若干函数:
例如我们可以赋予读取权限,写入权限与删除权限,来对应不同需求:
type Reader interface { Read 才能;(),界面{} } type Writer interface { Write 才能;(作家) } type ReadWriter interface { ,读者 ,作家 } type Remover interface { Remove 才能;() } type Sdata struct { data []接口才能{} } func (t * Sdata)得到(小姐:int)接口{}{ if 才能len (t.data), 0==, {return 零} if 才能;reflect.TypeOf (t.data [0]) .Implements (reflect.TypeOf(新(读者)).Elem()),==,真正的{ ,,,return t.data[我]。(读者).Read () ,,} } func (t * Sdata)修改(小姐,int, w 作家){//才能,if reflect.TypeOf (t.data [0]) .Implements (reflect.TypeOf(新(读写)).Elem()),==,真的 if 才能_好:=t.data[0]。(读写);好{ ,,,t.data[我]。(作家).Write (w) null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null