Sobes.tech

Golang

Úloha: «Ping-pong s timeoutom» Napíšte funkciu pingPong, ktorá: - Spustí dve gorutiny: jedna generuje správy "ping", druhá — "pong". - Gorutiny musia vymieňať správy cez spoločný kanál striktne po sebe. - Výmena pokračuje 3 sekundy, potom by mal program skončiť (pohotovostné vypnutie). - Použite kontext na zrušenie s timeoutom. - Vypisujte každú správu na obrazovku spolu s časom (v milisekundách od začiatku). Príklad očakávaného výstupu: 0ms: ping

216

Jednoduchá úloha na live coding (základná konkurencieschopnosť) Podmienka: Napíšte funkciu fetchAll(urls []string) map[string]string, ktorá pre každý URL vykoná konkurenčne HTTP GET požiadavku a vráti mapu, kde kľúčom je URL a hodnotou je telo odpovede (reťazec). Ak požiadavka zlyhá (chyba, nie 200), hodnotou bude prázdny reťazec. Obmedzenia: - Nie je možné používať externé knižnice (len štandardné). - Nie je možné meniť podpis. - Program nesmie spadnúť pri panike v http.Get. Príklad vstupu: ["[link]" "[link]" "[link]"]

201

package main 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

Čo povedať pohovoru (ak sa opýtajú) "Použil by som worker pool s pevne stanoveným počtom workerov, kanál pre úlohy a sync.WaitGroup. Worker-í budú vykonávať požiadavky, a timeout a zrušenie budú riadené cez kontext. Výsledky budem zbierať v bufferi, chránenom mutexom (alebo cez samostatný kanál)." Teraz je rad na teba Napíš kód v tomto chate. Skontrolujem ho a dám spätnú väzbu. Ak nevieš, kde začať, požiadaj o nápovedu. Veľa šťastia!

177

// všetky prvky slice musia byť jedinečné + celkovo 1000 prvkov // program sa nesmie zbytočne zaseknúť kvôli 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("duplicitný nárast") } checkIncrement[i] = 1 }() } time.Sleep(2 * time.Second) fmt.Println(len(data)) }

159

Čo je ukazovateľ a čo sa stane, ak je argumentom funkcie ukazovateľ?

159

Vyplňte slice prvkami bez mutexu, aby obsahoval všetkých 1000 prvkov.

148