Sobes.tech

Golang

Avito'dakı layihə haqqında daha ətraflı danış — üç il ərzində tək layihə idi?

Senior
222

func (c *Client) Send(ctx context.Context, messages []Message, maxWorkers int) error { sem := make(chan struct{}, maxWorkers) var wg sync.WaitGroup var resultErr error var once sync.Once for _, msg := range messages { wg.Add(1) go func(msg Message) { defer wg.Done() sem <- struct{}{} defer func() { <-sem }() body, err := json.Marshal(msg) if err != nil { once.Do(func() { resultErr = err; cancel() }) return } req, _ := http.NewRequestWithContext( ctx, http.MethodPost, c.url, bytes.NewReader(body), ) req.Header.Set("Content-Type", "application/json") resp, err := c.httpClient.Do(req) if err != nil { once.Do(func() { resultErr = err; cancel()}) return } defer resp.Body.Close() if resp.StatusCode >= 500 { once.Do(func() { resultErr = fmt.Errorf("server error") cancel()}) return } c.sentCount.Add(1) time.Sleep(time.Second) }(msg) } wg.Wait() }

Senior
192

/* İnkişaf etdiriciyə bildiriş göndərmə xidməti yazmaq tapşırığı verildi. Tələblər: - Send metodu mesajları paralel şəkildə göndərməlidir. - Eyni zamanda ən çox maxworkers HTTP sorğusu işləyə bilər. - Əgər ən azı bir göndərmə səhvlə nəticələnərsə, digər göndərmələr dayandırılmalı və xəta qaytarılmalıdır. - Metod kontekst ləğvini düzgün idarə etməlidir. - Bütün resurslar düzgün şəkildə azad edilməlidir. - Metod müxtəlif gorutinalardan eyni vaxtda çağırıla bilər. - Client uğurla göndərilən mesajların sayını saxlamalıdır. Kod nəzərdən keçirmə aparın, problemləri tapın və kodu düzəldin.

Senior
187

Goroutine-də msg-in tipi nədir və niyə onu arqument kimi keçirmək lazımdır?

Senior
184

Hansı yerdə defer resp.Body.Close() etmək lazımdır?

Senior
183

Go ilə inkişafda ümumi ticarət təcrübəniz nədir?

Senior
172

İngilis dilində texniki sənədlərlə işləmək rahat olacaqmı?

Senior
168

HamıAlətlər haqqında danış — niyə gəldin və niyə getdin?

Senior
164

Digər işəgötürənlərlə razılaşmalarınız varmı və ya hələ də müsahibə mərhələlərindəsiniz?

Senior
161

Tez oyunlar nədir?

Senior
157

SQL ilə hansı təcrübəniz var? Sorğuları yaza və optimallaşdıra bilirsinizmi?

Senior
157

Bu kodda kontekstlər harada bitir?

Senior
156

Verilənlər bazasına sorğu göndərərkən konteksti ötürməsəniz nə baş verir?

Senior
151

Niyə resultErr birbaşa goroutine-dən qaytarılmır?

Senior
148

sentCount sinxronizasiya olmadan ötürülür — bunu necə düzəltmək olar?

Senior
147

Yeni layihədə nə axtarırsan? Hansı texnologiyalar maraqlıdır? Yeni iş yerində görmək istəmədiyin nədir?

Senior
145

İndeks nə vaxt kömək etmir və ya hətta zərər verir?

Senior
126

Go xidməti üçün CI/CD boru xəttində adətən hansı mərhələlər (stages) mövcuddur?

Senior
93