关于匿名组合的语法

在许式伟的《Go语言编程》一书中,第83页的末尾,有这样的一部分内容:

在Go语言官方网站提供的Effective Go中曾提到匿名组合的一个小价值,值得在这里再提一 下。首先我们可以定义如下的类型,它匿名组合了一个 log.Logger 指针:

type Job struct {
    Command string
    *log.Logger
}

在合适的赋值后,我们在 Job 类型的所有成员方法中可以很舒适地借用所有 log.Logger 提 供的方法。比如如下的写法:

func (job *Job)Start() {
    job.Log("starting now...")
    job.Log("started.")
}

这段代码我总是编译不过去,总是告诉我:

./main.go:17: job.Log undefined (type *Job has no field or method Log)

这是怎么回事呢?

是我的方法有问题,还是许式伟写的不对?

共 2 个回复


jimmykuu

这段代码确实Effective Go里面的:http://golang.org/doc/effective_go.html#embedding

大概是Effective Go写的比较早的缘故,里面适用的log package和目前的并不一样,现在的log.Logger并没有Log方法,要想跑通,你可以换成Println方法。

# 0

qkevin123

嗨,犯了这么个低级错误!

谢了!

# 1