Поиск и устранение утечек горутин
Условие задачи
В представленном коде есть потенциальная проблема, связанная с работой горутин и утечками ресурсов. Необходимо проанализировать код, выявить недостатки и предложить корректное решение
gopackage main
import (
"fmt"
"runtime"
"time"
)
func main() {
for i := 0; i < 100; i++ {
requestData(1)
}
time.Sleep(time.Second * 1)
fmt.Printf("Number of hanging goroutines: %d\n", runtime.NumGoroutine())
}
func requestData(timeout time.Duration) string {
dataChan := make(chan string)
go func() {
dataChan <- requestFromSlowServer()
}()
select {
case result := <-dataChan:
fmt.Printf("[+] request returned: %s\n", result)
return result
case <-time.After(timeout):
fmt.Println("[!!] request timeout!")
return ""
}
}
func requestFromSlowServer() string {
time.Sleep(time.Second * 1)
return "very important data"
}