If the ordering of the slice is not important, you can use a map instead:
var receiverChannels = make(map[chan []byte]struct{})
channel:=make(chan []byte)
receiverChannels[channel]=struct{}{}
delete(receiverChannels,channel)
Otherwise, you need a find
helper function:
func find(channels []chan []byte, ch chan []byte) int {
for i:=range channels {
if channels[i]==ch {
return i
}
}
return -1
}
Or a generic find
:
func find[T comparable](slice []T, item T) int {
for i := range slice {
if slice[i] == item {
return i
}
}
return -1
}
If you need to keep a slice but ordering is not important, you can simply move the last element and truncate the slice:
i:=find(receiverChannels, channel)
if i!=-1 {
if i<len(receiverChannels)-1 {
receiverChannels[i]=receiverChannels[len(receiverChannels)-1]
}
receiverChannels=receiverChannels[:len(receiverChannels)-1]
}
Last, if ordering is important:
i:=find(receiverChannels, channel)
if i!=-1 {
receiverChannels=append(receiverChannels[:i], receiverChannels[i+1:]...)
receiverChannels=receiverChannels[:len(receiverChannels)-1]
}