我有一个数组 X ,如果条件为真,我正在尝试对其进行范围并删除一些元素。在没有任何并发的情况下执行此操作可以正常工作,但是当我尝试同时执行此操作时出现错误:“切片边界超出范围”
func main() {
X := make([][]int32, 10)
for i := 0; i < 10; i++ {
X[i] = []int32{int32(i), int32(i)}
}
ch := make(chan int, 20)
var wg sync.WaitGroup
fmt.Println(X)
for i := 0; i < 20; i++ {
wg.Add(1)
go func() {
defer wg.Done()
for index := range X {
// check some condition
if X[index][0]%2 == 0 && index < len(X)-1 {
ch <- index
break
}
}
}()
}
for {
ind, ok := <-ch
if ok {
X = append(X[:ind], X[ind+1:]...)
} else {
fmt.Println("closed chan")
break
}
}
wg.Wait()
fmt.Println(X)
}
https://play.golang.org/p/YeLamAU5_Rt
有什么方法可以使用索引并通过通道发送它,然后从不同的 goroutine 中删除相应的元素?
江户川乱折腾
30秒到达战场
相关分类