Sobes.tech

Golang

Užduotis: «Timeout su ping-pong» Parašykite funkciją pingPong, kuri: - Paleidžia dvi gorutinas: viena generuoja pranešimus "ping", kita — "pong". - Gorutinos turi keistis pranešimais griežtai paeiliui per bendrą kanalą. - Keitimasis tęsiasi 3 sekundes, po to programa turi baigtis (sklandus uždarymas). - Naudokite kontekstą su laiko limitu atšaukimui. - Kiekvieną pranešimą išveskite ekrane kartu su laiku (milisekundėmis nuo pradžios). Laukiamas išėjimas pavyzdys: 0ms: ping

216

Paprastas tiesioginio kodavimo uždavinys (pagrindinė konkurencija) Sąlyga: Parašykite funkciją fetchAll(urls []string) map[string]string, kuri kiekvienam URL vykdo konkuruojantį HTTP GET užklausą ir grąžina žemėlapį, kur raktas yra URL, o reikšmė – atsakymo turinys (eilutė). Jei užklausa nepavyksta (klaida, ne 200), reikšmė bus tuščia eilutė. Apribojimai: - Negalima naudoti išorinių bibliotekų (tik standartinės). - Negalima keisti parašo. - Programa neturėtų kristi panikos atveju http.Get. Įvesties pavyzdys: ["[link]" "[link]" "[link]"]

201

pagrindinis paketas import ( "fmt" ) func a(p *string) { s2 := "string2" *p = s2 } func main() { str1 := "string1" p := &str1 fmt.Println(*p) a(&p) fmt.Println(*p) }

185

Ką pasakyti interviuotojui (jei paklaus) "Aš naudociau worker pool su fiksuotu darbuotojų skaičiumi, užduočių kanalą ir sync.WaitGroup. Darbuotojai vykdys užklausas, o laiko limitas ir atšaukimas bus kontroliuojami per kontekstą. Rezultatus surinksiu į buferį, apsaugotą mutex (arba per atskirą kanalą)." Dabar tavo eilė Rašyk kodą šiame pokalbyje. Aš jį patikrinsiu ir duosiu atsiliepimų. Jei nežinai nuo ko pradėti, paprašyk patarimo. Sėkmės!

177

// visi slice elementai turi būti unikalūs + iš viso turi būti 1000 elementų // programa neturi užstrigti dėl time.sleep func main() { checkIncrement := map[int]int32{} var data []int for i := 0; i < 1000; i++ { go func() { data = append(data, i) if _, found := checkIncrement[i]; found { fmt.Println(i) panic("dublikatinis padidėjimas") } checkIncrement[i] = 1 }() } time.Sleep(2 * time.Second) fmt.Println(len(data)) }

159

Kas yra pointer ir kas nutiks, jei funkcijos argumentas yra pointer?

157

Užpildykite slice be mutex elementais, kad turėtų visus 1000 elementų.

148