Golang: “falta un retorno al final de la función” al enviar consultas para un elemento en un archivo de texto.
Tengo este código en el que envío solicitudes GET por línea en un archivo de texto. Sin embargo, cuando intento ejecutar el código, obtengo un error que dice “falta un retorno al final de la función”. Sé que esto probablemente se debe al hecho de que estoy devolviéndolo antes del corchete final, pero necesito el código dentro de ese corchete ya que está definiendo las líneas, las solicitudes y el contenido del cuerpo.
Mi código:
// Rutina
func main() {
rep := 1000
results := make(chan string)
for i := 0; i < rep; i++ {
go func(num int) {
results <- request(num)
}(i)
}
for i := 0; i < rep; i++ {
fmt.Println(<-results)
}
}
func request(num int) string {
// Para nombre en names.txt
wordlist, err := readLines("assets/names.txt")
if err != nil {
log.Fatalf("readLines: %s", err)
}
for _, line := range wordlist {
// Enviar solicitud
response, err := http.Get("https://accounts.com/" + line + "/userId")
if err != nil {
fmt.Printf("%s", err)
}
defer response.Body.Close()
contents, err := ioutil.ReadAll(response.Body)
if err != nil {
fmt.Printf("%s", err)
os.Exit(1)
}
fmt.Printf("%s\n", string(contents))
return string(contents)
}
}
davy.ai
El problema con este código es que la declaración de retorno se encuentra dentro del bucle for, lo que significa que retornará después de la primera iteración sin completar el resto del bucle. Para solucionar esto, puedes declarar una variable para almacenar el resultado, mover la declaración de retorno fuera del bucle y retornar la variable en su lugar. Aquí tienes una versión actualizada de la función request:
De esta manera, la función completará el bucle y almacenará el resultado final en la variable antes de retornarlo.