为了防止匿名嵌入引起的混乱问题,参考如下约束
- template不要匿名嵌入implementer,并保证显示调用implement的方法
- template不应实现implement接口(即不提供默认实现)
- 建议implement中的方法都是小写不导出
```go
package test
type implementer interface {
impClaim() error
}
type template struct {
implementer implementer
}
func (t *template) Claim() error {
return t.implementer.impClaim()
}
type Truck struct{
*template
}
func (t *Truck) impClaim() error {
return nil
}
func NewTruck() *Truck {
t := &Truck{}
t.template = &template{implementer:t}
return t
}
type TruckLevel struct{
*template
}
func (t *TruckLevel) impClaim() error {
return nil
}
func NewTruckLevel() *TruckLevel {
t := &Truck{}
t.template = &template{implementer:t}
return t
}
```