Go struct字段与接口方法

时间:2018-02-24 02:15:18

标签: go

来自第三方:

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

1 个答案:

答案 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})
}