如何在Golang中迭代同一列表时从列表中删除元素

I am new to go language. I would like to remove elements from the list while iterating the list based on a condition in go language. For example I want remove the duplicate elements from the list. Code is given below.

package main
import (
    "container/list"
    "fmt"
)
var sMap map[int]bool
func main() {
    l := list.New()
    l.PushFront(4)
    l.PushFront(5)
    l.PushFront(7)
    l.PushFront(6)
    l.PushFront(5)
    l.PushFront(4)
    l.PushFront(5)
    l.PushFront(7)
    l.PushBack(9)
    l = removeDuplicate(l)
    for e := l.Front(); e != nil; e = e.Next() {
        fmt.Println(e.Value)
    }
}
func removeDuplicate(l *list.List) *list.List {
    sMap = make(map[int]bool)
    for e := l.Front(); e != nil; e = e.Next() {
        m := e.Value.(int)
        fmt.Println("VALUE : ", m)
        if sMap[m] == true {
            fmt.Println("Deleting ", e.Value)
            l.Remove(e)
        } else {
            fmt.Println("Adding New Entry", e.Value)
            sMap[m] = true
        }
    }
    return l
}

The above code iterates through the list only till the first removal. I am trying to remove the element while iterating through the same list. That is the reason why it is not working. Could anyone suggest an list iterator in golang?

If e is removed from the list then call of e.Next() in the next loop will return nil. Therefore, need to assign e.Next() to the next before deleting e. Here is the example to clear all elements by iterating (in list_test.go)

// Clear all elements by iterating
var next *Element
for e := l.Front(); e != nil; e = next {
    next = e.Next()
    l.Remove(e)
}

Same pattern can be applied to the question as following;

package main
import (
    "container/list"
    "fmt"
)
var sMap map[int]bool
func main() {
    l := list.New()
    l.PushFront(4)
    l.PushFront(5)
    l.PushFront(7)
    l.PushFront(6)
    l.PushFront(5)
    l.PushFront(4)
    l.PushFront(5)
    l.PushFront(7)
    l.PushBack(9)
    l = removeDuplicate(l)
    for e := l.Front(); e != nil; e = e.Next() {
        fmt.Println(e.Value)
    }
}
func removeDuplicate(l *list.List) *list.List {
    sMap = make(map[int]bool)
    var next *list.Element
    for e := l.Front(); e != nil; e = next {
        m := e.Value.(int)
        next = e.Next()
        fmt.Println("VALUE : ", m)
        if sMap[m] == true {
            fmt.Println("Deleting ", e.Value)
            l.Remove(e)
        } else {
            fmt.Println("Adding New Entry", e.Value)
            sMap[m] = true
        }
    }
    return l
}

Output

VALUE :  7
Adding New Entry 7
VALUE :  5
Adding New Entry 5
VALUE :  4
Adding New Entry 4
VALUE :  5
Deleting  5
VALUE :  6
Adding New Entry 6
VALUE :  7
Deleting  7
VALUE :  5
Deleting  5
VALUE :  4
Deleting  4
VALUE :  9
Adding New Entry 9
7
5
4
6
9