Sobes.tech

Golang

Vazifa: «Timeout bilan ping-pong» pingPong nomli funktsiya yozing: - Ikki goroutine ishga tushiring: biri "ping" xabarlarini, ikkinchisi — "pong". - Goroutine'lar xabarlarni umumiy kanal orqali qat'iy tartibda almashishi kerak. - Almashinish 3 sekund davom etadi, so'ngra dastur tugashi kerak (g'amxo'rlik bilan yopish). - Timeout bilan bekor qilish uchun kontekstdan foydalaning. - Har bir xabarni ekranga, boshlang'ichdan boshlab millisekundlarda vaqt bilan birga chiqarib boring. Kutish mumkin bo'lgan chiqish misoli: 0ms: ping

224

Oddiy jonli kodlash vazifasi (asosiy raqobat) Shart: fetchAll(urls []string) map[string]string funktsiyasini yozing, u har bir URL uchun HTTP GET so'rovini raqobat bilan bajaradi va kalit - URL, qiymat - javob matni (qator) bo'lgan xaritani qaytaradi. Agar so'rov muvaffaqiyatsiz bo'lsa (xato, 200 emas), qiymat bo'sh satr bo'ladi. Cheklovlar: - Tashqi kutubxonalar ishlatilmasligi kerak (faqat standartlar). - Imzo o'zgartirilmasligi kerak. - Dastur http.Get'da panik bo'lsa, yiqilmasligi kerak. Kirish misoli: ["[link]" "[link]" "[link]"]

205

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

193

Boshqarmasiz 1000 element bo'lish uchun slice elementlarini to'ldiring.

184

Nima aytish kerak intervyu beruvchiga (agar so'rasa) "Men worker pool bilan ishlardim, unda ishchilar soni belgilangan, vazifalar uchun kanal va sync.WaitGroup bo'ladi. Ishchilar so'rovlarni bajaradi, va timeout hamda bekor qilish kontekst orqali boshqariladi. Natijalarni, mutex bilan himoyalangan bufferga yig'aman (yoki alohida kanal orqali)." Endi sening navating Bu chatda kod yoz. Men tekshiraman va fikr-mulohaza beraman. Qayerdan boshlashni bilmasang, maslahat so'rang. Omad!

177

// barcha elementlar slice da noyob bo‘lishi kerak + umumiy 1000 elementdan iborat bo‘lishi kerak // dastur time.sleep sababli ortiqcha to‘xtab qolmasligi kerak 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("takroriy inkrement") } checkIncrement[i] = 1 }() } time.Sleep(2 * time.Second) fmt.Println(len(data)) }

169

Pointer nima va agar funksiyaning argumenti pointer bo'lsa, nima bo'ladi?

163