Если я реализую такую очередь...
package main
import(
"fmt"
)
func PopFront(q *[]string) string {
r := (*q)[0]
*q = (*q)[1:len(*q)]
return r
}
func PushBack(q *[]string, a string) {
*q = append(*q, a)
}
func main() {
q := make([]string, 0)
PushBack(&q, "A")
fmt.Println(q)
PushBack(&q, "B")
fmt.Println(q)
PushBack(&q, "C")
fmt.Println(q)
PopFront(&q)
fmt.Println(q)
PopFront(&q)
fmt.Println(q)
}
... Я получаю массив ["A", "B", "C"]
, у которого нет срезов, указывающих на первые два элемента. Поскольку "начальный" указатель среза никогда не может быть уменьшен (AFAIK), эти элементы никогда не могут быть доступны.
Is Go сборщик мусора достаточно умный, чтобы освободить их?