Golang
Ce abordări pot fi utilizate pentru a asigura siguranța thread-urilor atunci când se lucrează cu slices într-un mediu multi-threaded?
Ce operații sunt permise atunci când se lucrează cu un slice nil în limbajul de programare?
Ce metodologii de proiectare a sistemelor preferi atunci când creezi soluții?
Povesti despre o sarcină dificilă pe care ai reușit să o rezolvi scriind un script pentru sistemul Linux
Cum se poate regla volumul de date stocate în cache?
Disponibilitatea de a acționa ca singurul specialist Backend în echipă
Care este motivul principal pentru utilizarea tipului sync.Map în Go?
Care sunt practicile bune și antipattern-urile în testarea unităților? Cum să înțelegi dacă testele sunt bune?
func Exclude(a, b []int) []int { set := make(map[int]struct{}) for _, v := range b { set[v] = struct{}{} } result := make([]int, 0) for _, v := range a { if _, ok := set[v]; !ok { result = append(result, v) } } return result } Eroare de compilare # command-line-arguments ./main.go:39:32: eroare de sintaxă: linie nouă neașteptată, s-așteptat { după clauza if
V-ați confruntat vreodată cu dificultăți în implementarea interacțiunilor între diferite servicii?
Cum se transmite o felie (slice) către o funcție într-un limbaj de programare?
Ce este pattern-ul Saga?
De ce nu au folosit Testcontainers?
/* Trebuie să transferăm date dintr-o sursă către un consumator. Sursa oferă date în loturi mici (~zeci de înregistrări), în timp ce consumatorul funcționează mai eficient cu loturi mari. Un exemplu real este transferul de date din cozi de tip Kafka în baza de date Clickhouse. Sursa: - Practic infinită. - Sursa nu returnează niciodată mai mult de MaxItems în cadrul unei singure apelări Next. - În cadrul unei "sesiuni" (un apel al funcției Pipe), sursa returnează date noi la fiecare Next. - Cu toate acestea, după repornire, sursa va începe de la poziția "confirmată" anterioară, indicată de cookie. Prin urmare, *fiecare* valoare de cookie returnată de Next, după salvarea datelor în receptor, trebuie confirmată cu o apelare la Commit, în aceeași ordine în care au fost returnate de Next. Receptor: - Nu poate procesa mai mult de MaxItems odată. Nivel de bază: Este necesar să implementați funcția func Pipe(p Producer, c Consumer) error care citește date din sursă, le grupează într-un buffer de dimensiune maximă MaxItems și le salvează în receptor, apoi confirmă progresul în sursă. */ const MaxItems = 9999 type Producer interface { // Next returnează: // - un lot de elemente de procesat // - un cookie pentru a fi confirmat după finalizarea procesării // - o eroare Next() (items []any, cookie int, err error) // Commit este folosit pentru a marca lotul de date ca fiind procesat Commit(cookie int) error } type Consumer interface { Process(items []any) error } func Pipe(p Producer, c Consumer) error { var buf []any var cookies []int for { items, cookie, err := p.Next() if err != nil { return err } buf = append(buf, items...) cookies = append(cookies, cookie) if len(buf) >= MaxItems { if err := c.Process(buf); err != nil { return err } for _, c := range cookies { if err := p.Commit(c); err != nil { return err } } buf = buf[:0] cookies = nil } } if len(buf) > 0 { if err := c.Process(buf); err != nil { return err } for _, c := range cookies { if err := p.Commit(c); err != nil { return err } } } return nil }
O tabel cu (id PRIMARY KEY, data JSON) — un index PostgreSQL este destul de bun pentru căutarea după cheie?
Care este diferența dintre virtualizare și containerizare?
Se poate insera un alt bloc de cod cu acolade în interiorul unei funcții existente?
Cum ați definit și formulat sarcinile în postul dumneavoastră anterior?
Cum a fost implementat codul final în mediul de producție în ultimul dvs. proiect?
Cum funcționează operațiunea de adăugare a unui element nou într-un slice într-un limbaj de programare?