Sobes.tech
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)) } }