2 回答

TA貢獻(xiàn)1963條經(jīng)驗(yàn) 獲得超6個(gè)贊
定義為的新類型type errorLogger *log.Logger不繼承基礎(chǔ)類型的方法。
請(qǐng)參閱 Go 規(guī)范、類型聲明 >類型定義:
定義的類型可能具有與之關(guān)聯(lián)的方法。它不繼承綁定到給定類型的任何方法,但接口類型或復(fù)合類型元素的方法集保持不變
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貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超9個(gè)贊
兩個(gè)新的 logger 類型 errorLogger 和 infoLogger 是新類型,它們沒有底層類型的方法。您應(yīng)該直接使用記錄器類型而不創(chuàng)建新類型,或者使用嵌入定義新的記錄器類型。當(dāng)您定義新的結(jié)構(gòu)類型并嵌入記錄器時(shí),新類型將具有嵌入類型的方法。當(dāng)您像您一樣定義新類型時(shí),新類型將沒有其基本類型的方法。
- 2 回答
- 0 關(guān)注
- 131 瀏覽
添加回答
舉報(bào)