Наличие указателя на внешнюю структуру - единственный способ сделать это. Недостатком является то, что вы должны убедиться, что указатель инициализирован. Итак, что-то вроде функции конструктора может помочь:
func NewOuter() *Outer {
ret:=Outer{}
ret.outer=&ret
return &ret
}
Кроме того, вы должны помнить, как вы передаете Outer
, потому что указатель во внутренней структуре может в конечном итоге указывать на экземпляр Outer you не ожидайте:
func f(o Outer) {
g(&o)
}
Выше g
получит экземпляр Outer
с указателем, указывающим на экземпляр Outer
, отличный от того, который он получил.