来自第三方:
package lib
type Bar interface{
Age() int
}
Foo(b Bar) int
这不会编译,因为Age
既是方法名称又是字段名称:
package main
import "lib"
type Person struct {
Age int
}
func (p *Person)Age() int {
return p.Age
}
func main() {
p := Person()
lib.Foo(p)
}
没有重命名Person.Age
,有没有办法在lib.Foo()
的实例上调用Person
?
答案 0 :(得分:6)
当然,不是直接的,原因已经说明了。但你可以创建一个围绕Person的包装器,并将其传递给:
type BarPerson struct {
*Person
}
func (bp *BarPerson) Age() int {
return bp.Person.Age
}
func main() {
p := Person{37}
lib.Foo(&BarPerson{&p})
}