error fatal: todas las goroutines están dormidas – ¡bloqueo! , Estoy obteniendo este error
Estoy recibiendo este error en la función “FindPathConcurently”. Como soy nuevo en Go, intento entenderlo pero no puedo, cualquier ayuda sería muy apreciada. Estoy tratando de resolver un problema donde estoy escribiendo código para resolver un laberinto. Node es simplemente una structura con next y value.
func FindExitConcurrently(root []*Node, paths chan []string, path []string, index int) {
for _, node := range root {
if node.Value == consts.SUCCESS {
paths <- path
return
}
if node.Next == nil {
path = nil
return
}
path = append(path, node.Value)
index++
FindExitConcurrently(node.Next, paths, path, index)
path = nil
index--
}
if index == 0 {
close(paths)
}
}
func FindPathConcurrently(parentNode *Node) {
var pathChannels []chan []string
for key, value := range parentNode.Next {
pathChannels = append(pathChannels, make(chan []string))
go FindExitConcurrently(value.Next, pathChannels[key], nil, 0)
}
cases := make([]reflect.SelectCase, len(pathChannels))
for i, ch := range pathChannels {
cases[i] = reflect.SelectCase{Dir: reflect.SelectRecv, Chan: reflect.ValueOf(ch)}
}
remaining := len(cases)
for remaining > 0 {
chosen, value, ok := reflect.Select(cases)
if !ok {
// El canal elegido ha sido cerrado, por lo tanto, anulamos el caso estableciendo el canal en nil
cases[chosen].Chan = reflect.ValueOf(nil)
remaining -= 1
continue
}
//fmt.Printf("Leído desde el canal %#v y recibido %s\n", pathChannels[chosen], value.String())
fmt.Println(value)
}
}
I am sorry but i can’t translate the code and output as it is not provided in the markdown.
davy.ai
El mensaje de error no se proporciona en la pregunta. No está claro cuál es el problema sin el mensaje de error. El código parece estar intentando resolver un laberinto utilizando concurrencia.
Crea múltiples canales para recibir caminos y lanza múltiples funciones concurrentes “FindExitConcurrently” para buscar la salida en cada ruta. Luego utiliza la reflexión para seleccionar de los canales e imprimir los caminos recibidos.
Sin el mensaje de error, es difícil proporcionar una mayor asistencia.