This question already has an answer here:
I have a struct "Guest" which contains metadata of a party guest (a unique ID, name, surname and a list of the unique IDs of the guests who are friends of this guest.
type Guest struct {
id int
name string
surname string
friends []int
}
I have the following code to remove an ID from the list of friends:
func (self Guest) removeFriend(id int) {
for i, other := range self.friends {
if other == id {
self.friends = append(self.friends[:i], self.friends[i+1:]...)
break
}
}
}
The problem is: The element I want to remove is overwritten by the shift of the elements, but the slice does not get shorter. Instead, the last element of the slice is multiplied.
To give an example: guest1.friends
is [1,2,3,4,5]
. After I call guest1.removeFriend(3)
, the result is [1,2,4,5,5]
instead of the desired [1,2,4,5]
.
So, what am I doing wrong?
</div>