考虑到这样的事情:
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 } }
答案 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}
}
然后,您的客户可以访问NewFooFoo
和FooFoo
,但不能访问foo
。
至于将Foo
投射到Bar
,不确定为什么会这样,但你可以这样做,如果你在 Go1.8 + ,这个方式(*Foo)(&Bar{ 5 })
playground。