hlavní balíček func main() { c := make(chan int, 1) pro rozsah 3 { select { výchozí: println(1) případ <-c: println(2) případ c <- 1: println(3) } } }
Golang
```go func fail() { panic("Selhání!") } func main() { fmt.Println("Začátek!") 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("Konec!") } ```
Proč jste zvolili Elasticsearch? Jaké byly další možnosti? Vybrali jste něco nebo byl ELK již k dispozici?
Máte nějaké otázky ohledně projektů nebo pracovních podmínek?
Říkáš, že pomocí Elasticsearch jsi vytvořil nástroj pro rychlé hledání transakcí. Co to je, kolik transakcí je tam a jaký má to přínos?
func fetch(ctx context.Context, u User) (string, error) { // něco děláme v síti time.Sleep(time.Millisecond * 10) // simulace zpoždění return u.Name, nil //return "", errors.New("nějaká 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: } }() }
Nakonec, z jakých řešení jste vybírali? ClickHouse, ELK a co ještě?
Kde momentálně pracujete?
Byly po zavedení Elasticsearch nějaké zpětné vazby od uživatelů nebo technické podpory?
Co činí systém vysoce zatíženým? Na základě vaší odbornosti.
Máte vojenskou legitimaci?
Od jaké částky zvažujete nabídku?
hlavní balíček import ( "fmt" ) func main() { c := make(chan string, 1) go fmt.Println(<-c) c <- "Ahoj světe!" fmt.Println("Výstup!") } fatální chyba: všechny gorutiny jsou spící - deadlock! goroutine 1 [příjem kanálu]: main.main() /tmp/sandbox[phone]/prog.go:10 +0x3a Program ukončen: stav 2.
hlavní balíček func main() { c := make(chan int) pro rozsah 3 { select { výchozí: println(1) případ <-c: println(2) pří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("Kilép!") }
Jakou souvislost mají služby, když mluvíme o odolnosti proti chybám a zjednodušili jsme to na repliky?
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íček import ( "fmt" ) func main() { c := make(chan string) go fmt.Println(<-c) c <- "Ahoj světe!" fmt.Println("Výstup!") } fatální chyba: všechny gorutiny jsou spící - deadlock! goroutine 1 [příjem kanálu]: main.main() /tmp/sandbox[phone]/prog.go:10 +0x3a Program ukončen: stav 2.
Kde právě bydlíte?
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 }