来自第三方:
package lib
type Bar interface{
Age() int
}
Foo(b Bar) int
Run Code Online (Sandbox Code Playgroud)
这不会编译,因为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)
}
Run Code Online (Sandbox Code Playgroud)
没有重命名Person.Age,有没有办法调用lib.Foo()一个实例Person?
当然,不是直接的,原因已经说明了.但你可以创建一个围绕Person的包装器,并将其传递给:
type BarPerson struct {
*Person
}
func (bp *BarPerson) Age() int {
return bp.Person.Age
}
func main() {
p := Person{37}
lib.Foo(&BarPerson{&p})
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1501 次 |
| 最近记录: |