Setting pointers to nil to prevent memory leak in Golang

I’m learning Go, and as an exercise I wanted to implement a linked list. For reference I looked at the official Go code ( . One thing that stuck with me are these lines:

   108  // remove removes e from its list, decrements l.len, and returns e.
   109  func (l *List) remove(e *Element) *Element {
   110 =
   111 = e.prev
   112 = nil // avoid memory leaks
   113      e.prev = nil // avoid memory leaks
   114      e.list = nil
   115      l.len--
   116      return e
   117  } 

I am curious as to how does setting pointers to nil in this case prevent memory leaks? If possible I would like to construct a program which has this flaw and see it while profiling with pprof (I would use a modified verion of the list.go without this nil pointer setting).

For clarity of answer : If one of the nodes has an external pointer to it, then all of the adjacent removed nodes will have an active reference through that pointer and won’t be removed. enter image description here

  1. We create an external pointer pointing to Node2
  2. We remove nodes 2-4 from the list
  3. You would expect at this point only for the Node 1,2 & 5 to be alive and the rest to be GC-ed. However, due to Node2 still pointing to Node3 & etc., the entire chain remains uncollected.