為了防止匿名嵌入引起的混亂問題,參考如下約束
- 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
}
```