对结构中字段的外部引用是否会阻止该结构被垃圾收集?

Does an external reference to a field within a struct prevent that struct from being garbage collected?

例如,如果我有一些 type A struct { B string; C int },并且我有一个 func foo(a A) *string { return &a.B },并且我用 c := foo(a) 调用它,那么 a 一定会保留在上下文中直到c 是收藏品?

或者,如果我定义 func foo1(a A) *string { s := a.B; return &s },那会对何时可以收集 A 有任何影响吗?

在第一个例子中,假设调用foo(a)后没有使用aa是可回收的,因为你按值传递了a。该函数返回了一个指向 a 副本中的值的指针,因此 a 变得可收集,但在函数 foo 中创建的副本不可收集。

现在,如果您将 &a 传递给 foo(a *A),那么 a 将无法收集,因为 c 是指向它的指针。

您给出的第二个示例也传递了 a 的副本,因此适用相同的参数。但是,如果您传递 &a,然后返回一个指向副本的指针,则来自 a 的字符串将是可收集的,但不是您返回的字符串,因为有一个对它。