2 回答
TA贡献1963条经验 获得超6个赞
定义为的新类型type errorLogger *log.Logger不继承基础类型的方法。
请参阅 Go 规范、类型声明 >类型定义:
定义的类型可能具有与之关联的方法。它不继承绑定到给定类型的任何方法,但接口类型或复合类型元素的方法集保持不变
type Mutex struct { /* Mutex fields */ }
func (m *Mutex) Lock() { /* Lock implementation */ }
func (m *Mutex) Unlock() { /* Unlock implementation */ }
// NewMutex has the same composition as Mutex but its method set is empty.
type NewMutex Mutex
// The method set of PtrMutex's underlying type *Mutex remains unchanged,
// but the method set of PtrMutex is empty.
type PtrMutex *Mutex
由此可见Printf和 其他*log.Logger方法不在 和的方法集中。errorLoggerinfoLogger
您可以使用组合:
type errorLogger struct {
*log.Logger
}
然后你可以初始化它:
&Logger{
Error: errorLogger{
Logger: log.New(os.Stderr, "ERROR\t", log.Ldate|log.Ltime|log.Lshortfile),
},
}
TA贡献1860条经验 获得超9个赞
两个新的 logger 类型 errorLogger 和 infoLogger 是新类型,它们没有底层类型的方法。您应该直接使用记录器类型而不创建新类型,或者使用嵌入定义新的记录器类型。当您定义新的结构类型并嵌入记录器时,新类型将具有嵌入类型的方法。当您像您一样定义新类型时,新类型将没有其基本类型的方法。
- 2 回答
- 0 关注
- 96 浏览
添加回答
举报