为了账号安全,请及时绑定邮箱和手机立即绑定

调用提升函数时出现未定义错误

调用提升函数时出现未定义错误

Go
慕姐8265434 2023-06-01 14:11:22
undefined在 GO 中使用提升的函数时出现错误。import "log"type logger struct {    log.Logger}logError := logger.New(os.Stderr, "ERROR", log.LstdFlags)logOut := logger.New(os.Stdout, "INFO", log.LstdFlags)这导致编译器错误:logger.go: logger.New undefined (type logger has no method New)但是,New是log.Logger. 这里有什么问题?
查看完整描述

1 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

没有Logger.New()方法,只有一个log.New()返回值的函数*log.Logger

func New(out io.Writer, prefix string, flag int) *Logger

生成的 go doc 特意在它们返回的类型下列出了此类“构造函数”函数,以便您可以轻松找到它们,但这种分组不会使它们成为方法。log.New()没有接收者,所以它不能是方法,只能是函数。

您可以使用log.New()to 获取 type 的值*log.Logger,如果取消引用,您将获得 type 的值log.Logger,即您嵌入的值。

但是,如果首先将某些东西作为指针交给您,则强烈表明您应该将其作为指针使用(并且不应取消引用它)。所以我会嵌入*log.Logger,方法仍然会得到提升(因为它们有指针接收器)。这是您可以初始化记录器的方式:

type logger struct {

    *log.Logger

}


var logError = logger{

    Logger: log.New(os.Stderr, "ERROR", log.LstdFlags),

}


var logOut = logger{

    Logger: log.New(os.Stdout, "INFO", log.LstdFlags),

}

尽管如果您不向您的logger类型添加任何其他内容,我认为它的存在是不合理的,您*log.Logger也可以使用。


查看完整回答
反对 回复 2023-06-01
  • 1 回答
  • 0 关注
  • 125 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信