hlavný balík func main() { c := make(chan int, 1) pre rozsah 3 { select { predvolený: println(1) prípad <-c: println(2) prípad c <- 1: println(3) } } }
Golang
```go func fail() { panic("Neúspech!") } func main() { fmt.Println("Začiatok!") var wg sync.WaitGroup wg.Add(1) go func() { defer func() { if e := recover(); e != nil { fmt.Println(e) } }() fail() wg.Done() }() wg.Wait() fmt.Println("Koniec!") } ```
Prečo ste si vybrali Elasticsearch? Aké boli možnosti? Vybrali ste niečo alebo bol ELK už k dispozícii?
Máte otázky ohľadom projektov alebo pracovných podmienok?
Praviš, da si s Elasticsearchom ustvaril orodje za hitro iskanje transakcij. Kaj je to, koliko transakcij je in kakšna je od tega korist?
Nakoniec, z akých riešení ste si vyberali? ClickHouse, ELK a čo ešte?
func fetch(ctx context.Context, u User) (string, error) { // niečo robíme v sieti time.Sleep(time.Millisecond * 10) // simulácia oneskorenia return u.Name, nil //return "", errors.New("nejaká chyba") } func Do(ctx context.Context, users []User) (map[string]int64, error) { var mu sync.Mutex var wg sync.WaitGroup ch := make(chan error, len(users)) names := make(map[string]int64, 0) ctxWithCancel, cancel := context.WithCancel(ctx) wg.Add(len(users)) for _, u := range users { go func() { defer wg.Done() select { case name, err := fetch(ctx, u): if err != nil { ch <- err return } mu.Lock() names[name] = names[name] + 1 mu.Unlock() case <-ctxWithCancel.Err: } }() }
Aký má vzťah k služby, ak hovoríme o odolnosti voči chybám a znížili sme to na repliky?
Kde momentálne pracujete?
Bol nejaký spätná väzba od používateľov alebo technickej podpory po zavedení Elasticsearch?
Čo robí systém vysoko zaťaženým? Na základe vašej odbornosti.
Máte vojenskú legitimáciu?
hlavný balík import ( "fmt" ) func main() { c := make(chan string, 1) go fmt.Println(<-c) c <- "Ahoj světe!" fmt.Println("Výstup!") } fatálna chyba: všetky gorutiny spia - deadlock! goroutine 1 [prijímanie kanála]: main.main() /tmp/sandbox[phone]/prog.go:10 +0x3a Program ukončený: stav 2.
Od akej sumy zvažujete ponuku?
hlavný balík func main() { c := make(chan int) pre rozsah 3 { select { predvolený: println(1) prípad <-c: println(2) prípad c <- 1: println(3) } } }
balíček main import ( "fmt" ) func main() { c := make(chan string) go fmt.Println(<-c) c <- "Hello World!" fmt.Println("Exit!") }
var defaultTxOptions = &sql.TxOptions{} const defaultCurrency = "RUB" func CreateUserWithDefaultCurrency(ctx context.Context, db *sql.DB, email, passwordHash string) error { tx, err := db.BeginTx(ctx, defaultTxOptions) if err != nil { return err } defer func() { if err != nil{ tx.Rollback() } }() _, err = tx.Exec("INSERT INTO users (email, password) VALUES (?, ?)", email, passwordHash) if err != nil { return err } rows, err := tx.Query("SELECT id FROM users WHERE email = ?", email) if err != nil { return err } defer rows.Close() id := 0 for rows.Next() { err = rows.Scan(&id) if err != nil { return err } } _, err = tx.Exec("INSERT INTO balances (user_id, currency, current_balance) VALUES (?, ?, 0)", id, defaultCurrency) if err != nil { return err } return tx.Commit() }
hlavný balík import ( "fmt" ) func main() { c := make(chan string) go fmt.Println(<-c) c <- "Ahoj svet!" fmt.Println("Výstup!") } fatálna chyba: všetky gorutiny spia - deadlock! goroutine 1 [prijímanie kanála]: main.main() /tmp/sandbox[phone]/prog.go:10 +0x3a Program ukončený: stav 2.
Kde teraz bývate?
func Do(ctx context.Context, users []User) (map[string]int64, error) { var mu sync.Mutex var wg sync.WaitGroup ch := make(chan error, len(users)) names := make(map[string]int64, 0) ctxWithCancel, cancel := context.WithCancel(ctx) wg.Add(len(users)) for _, u := range users { go func() { defer wg.Done() select { case name, err := fetch(ctx, u): if err != nil { ch <- err return } mu.Lock() names[name] = names[name] + 1 mu.Unlock() case <-ctxWithCancel.Err: } }() } return names, nil }