限制自定义类型所拥有的方法

这是阅读Inject包时候注意到的一个技巧,在Inject包中:

type Injector interface {

    // 实质上,该接口包含了多个方法的“声明”(暂且称之为“声明”吧),即方法的列表

}

type injector struct {

values map[reflect.Type]reflect.Value

parent Injector  // Injector接口

}

func New() Injector {

return &injector{

values: make(map[reflect.Type]reflect.Value),

}

}

如果使用New()创建的injector类型结构体对象:

inj := inject.New()

由于New()返回的实际上是满足了Injector接口的

所能调用的方法只有Injector中声明的方法,即使在该结构体类型上定义了其他方法,如:

func (i *injector) Foo() string{

return "just for test "

}

也不能调用Foo()方法。


你可能感兴趣的:(限制自定义类型所拥有的方法)