如何转换为typeof(field)?

时间:2017-03-20 21:26:04

标签: go

考虑到这样的事情:

type Foo struct {
  x int
}

type FooFoo struct {
  foo *Foo
}

type Bar struct {
  x int
}

隐藏Foo的地方(在我的情况下是由于出售),如何使用有效的foo条目创建FooFoo结构?

如果Foo可用,我可以

foofoo := &FooFoo{ foo: &Foo{5} }

甚至

foofoo := &FooFoo{ foo: (*Foo)&Bar{ 5 } }

但如果不提及Foo,我就无法找到方法。

我想我需要这样的东西:

foofoo := &FooFoo{ foo: (*typeof(FooFoo.foo)) &Bar{ 5 } }

2 个答案:

答案 0 :(得分:1)

您不应该从其他库as per this answer设置私有方法。然而, 该库应该有一个合适的构造函数。该库应该有一个类似于

的方法
func FooFooGenerator(appropriateInfo int) FooFoo {
 ... Library does the work 
}

答案 1 :(得分:0)

你只需要导出一个"构造函数" FooFoo的功能,并保持foo未导出。

func NewFooFoo() *FooFoo {
    f := &foo{ /* initialize foo */ }
    return &FooFoo{foo:f}
}

然后,您的客户可以访问NewFooFooFooFoo,但不能访问foo

至于将Foo投射到Bar,不确定为什么会这样,但你可以这样做,如果你在 Go1.8 + ,这个方式(*Foo)(&Bar{ 5 }) playground