Ասացեք ավելին Ավիտոյում նախագծի մասին — դա միակ նախագիծն էր երեք տարվա ընթացքում?
Golang
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() }
Ի՞նչ տեսակ է msg-ը գորուտինում և ինչու է անհրաժեշտ փոխանցել այն որպես արգումենտ։
Ինչու resultErr-ը ուղղակիորեն չի վերադարձվում goroutine-ից?
Կա՞ն համաձայնություններ այլ գործատուների հետ կամ դեռ անցնում եք հարցազրույցի փուլերը։
/* Ծրագրավորողին տրված է գործառույթ գրել ծանուցումների ուղարկման ծառայություն: Պահանջներ: - Send մեթոդը պետք է ուղարկի հաղորդագրությունները միաժամանակ: - Միաժամանակ չպետք է կատարվեն ավելի քան maxworkers HTTP հարցումներ: - Եթե առնվազն մեկ ուղարկում ձախողվի, մնացածները պետք է կանգնեցվեն և վերադարձվի սխալ: - Մեթոդը պետք է ճիշտ կերպով կառավարի կոնտեքստի չեղարկումը: - Բոլոր ռեսուրսները պետք է ճիշտ կերպով ազատվեն: - Մեթոդը կարող է համաժամանակորեն կանչվել տարբեր goroutines-ներից: - Client-ը պետք է պահի հաջողությամբ ուղարկված հաղորդագրությունների քանակը: Կոդը պետք է վերանայվի, խնդիրները հայտնաբերվեն և կոդը ուղղվի:
Որտե՞ղ պետք է կատարել defer resp.Body.Close()։
Ի՞նչ է ձեր ընդհանուր առևտրային փորձը Go-ով զարգացման ոլորտում։
Կարող կլինի արդյոք հարմարավետ աշխատել տեխնիկական փաստաթղթերի հետ անգլերեն լեզվով?
Պատմիր ինձ Ամենաշարժականների մասին — ինչու եկար և ինչու գնացիր?
Ինչ փորձառություն ունես SQL-ով? Կարողանում ես գրել և օպտիմալացնել հարցումները?
Որտե՞ղ են ավարտվում կոնտեքստները այս կոդում։
Ի՞նչ են արագ խաղերը։
Ի՞նչ ես փնտրում նոր նախագծում: Ի՞նչ տեխնոլոգիաներ են հետաքրքիր քեզ: Ի՞նչ չես ուզում տեսնել նոր աշխատանքային վայրում:
sentCount փոխանցվում է սինխրոնիզացիայի առանց — ինչպես դա ուղղել?
Ի՞նչ կլինի, եթե տվյալների բազայի հարցում կոնտեքստը չփոխանցեք։
Երբ ցուցիչը օգուտ չի բերում կամ նույնիսկ վնաս է հասցնում?
Ի՞նչ փուլեր (stages) սովորաբար կան CI/CD պիպլայնում Go-ծառայության համար։