第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何擴展現(xiàn)有類型以符合接口

如何擴展現(xiàn)有類型以符合接口

Go
長風秋雁 2022-06-27 16:22:46
我Logger用這些方法定義了一個接口:type Logger interface {    Info(args ...interface{})    Warn(args ...interface{})    Error(args ...interface{})}現(xiàn)在,我想擴展log.Logger類型以符合這個接口。由于log.Logger沒有定義這些方法,我需要實現(xiàn)它們。我試圖通過添加新方法來擴展它:type LoggerImpl log.Loggerfunc (logger *LoggerImpl) Info(v ...interface{}) {    logger.Println(v)}func (logger *LoggerImpl) Warn(v ...interface{}) {    logger.Println(v)}func (logger *LoggerImpl) Error(v ...interface{}) {    logger.Println(v)}但似乎這是錯誤的方法,因為我收到一條錯誤消息logger.Println undefined (type *LoggerImpl has no field or method Println)。我嘗試過的另一個解決方案是嵌入類型,但這也會返回錯誤:type LoggerImpl struct {    log.Logger}func (logger *LoggerImpl) Info(v ...interface{}) {    logger.Println(v)}func (logger *LoggerImpl) Warn(v ...interface{}) {    logger.Println(v)}func (logger *LoggerImpl) Error(v ...interface{}) {    logger.Println(v)}func initLogger() *LoggerImpl {    logger := log.New(os.Stdout, "", log.Lshortfile)    return logger}我在這里得到的錯誤是從initLogger函數(shù)返回記錄器時:cannot use logger (variable of type *log.Logger) as *LoggerImpl value in return statement如何修改log.Logger類型以符合Logger接口?
查看完整描述

1 回答

?
哈士奇WWW

TA貢獻1799條經驗 獲得超6個贊

您不能為在不同包中聲明的類型定義方法。但是,您可以定義一個新類型,將舊類型嵌入到新類型中,并為新類型定義新方法:


type LoggerImpl struct {

   *log.Logger

}



func (logger *LoggerImpl) Error(v ...interface{}) {

    logger.Logger.Println(v)

}


func initLogger() *LoggerImpl {

    logger := &LoggerImpl{Logger:log.New(os.Stdout, "", log.Lshortfile)}


    return logger

}

...


上面,LoggerImpl包含為 聲明的所有方法log.Logger,以及您在此包中顯式聲明的方法。


一般來說:如果您將一個類型嵌入到另一個結構中,則封閉結構會獲取為嵌入類型定義的所有方法。如果從另一種類型定義新類型,則新類型不會獲得基類型的任何方法。


查看完整回答
反對 回復 2022-06-27
  • 1 回答
  • 0 關注
  • 140 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號