在GO中使用提升功能时,出现 public void test()
{
uint firstInt = 987654321;
var array = IntToBCD5(firstInt);
var outInt = BCD5ToInt(array);
MessageBox.Show(outInt.ToString());
}
错误。
undefined
这会导致编译器错误:
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
的升级功能。怎么了?
答案 0 :(得分:3)
没有Logger.New()
方法,只有一个返回值log.New()
的*log.Logger
函数:
func New(out io.Writer, prefix string, flag int) *Logger
生成的go doc会在它们返回的类型下故意列出此类“构造函数”,以便您可以轻松找到它们,但是这种分组并未使它们成为方法。 log.New()
没有接收者,因此它不能是方法,而只能是函数。
您可以使用log.New()
获得类型*log.Logger
的值,如果您取消引用,则将获得类型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
。