Senior
Basit canlı kodlama görevi (temel eşzamanlılık) Koşul: fetchAll(urls []string) map[string]string fonksiyonunu yaz, her URL için eşzamanlı olarak HTTP GET isteği yap ve anahtar URL, değer ise yanıt gövdesi (string) olan bir harita döndür. İstek başarısız olursa (hata, 200 değilse), değer boş bir dize olacak. Kısıtlamalar: - Dış kütüphaneler kullanılamaz (sadece standartlar). - İmza değiştirilemez. - Program, http.Get'te panik olursa çökmemeli. Giriş örneği: ["[link]" "[link]" "[link]"]
sobes.tech yapay zeka
AI'dan gelen yanıt
go package main
import ( "fmt" "io/ioutil" "net/http" "sync" )
func fetchAll(urls []string) map[string]string { results := make(map[string]string) var mu sync.Mutex var wg sync.WaitGroup
for _, url := range urls {
wg.Add(1)
go func(u string) {
defer wg.Done()
// Обработка паники в http.Get
defer func() {
if r := recover(); r != nil {
mu.Lock()
results[u] = ""
mu.Unlock()
}
}()
resp, err := http.Get(u)
if err != nil {
mu.Lock()
results[u] = ""
mu.Unlock()
return
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
mu.Lock()
results[u] = ""
mu.Unlock()
return
}
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
mu.Lock()
results[u] = ""
mu.Unlock()
return
}
mu.Lock()
results[u] = string(body)
mu.Unlock()
}(url)
}
wg.Wait()
return results
}
func main() { urls := []string{ "https://example.com", "https://golang.org", "https://invalid.url", } results := fetchAll(urls) for url, body := range results { fmt.Printf("URL: %s, Body length: %d\n", url, len(body)) } }