главни пакет func main() { c := make(chan int, 1) за опсег 3 { изабери { подразумевано: println(1) случај <-c: println(2) случај c <- 1: println(3) } } }
Golang
```go func fail() { panic("Neuspeh!") } func main() { fmt.Println("Početak!") 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("Kraj!") } ```
Zašto ste odabrali Elasticsearch? Koje su bile alternative? Da li ste nešto birali ili je ELK već bio prisutan?
Da li imate pitanja u vezi sa projektima ili uslovima rada?
Kažeš da si pomoću Elasticsearch napravio alatku za brzo pretraživanje transakcija. Šta je to, koliko transakcija ima i kakva je od toga korist?
Na kraju, iz kojih rešenja ste birali? ClickHouse, ELK i šta još?
func fetch(ctx context.Context, u User) (string, error) { // nešto radimo u mreži time.Sleep(time.Millisecond * 10) // simulacija kašnjenja return u.Name, nil //return "", errors.New("neka greška") } 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: } }() }
Šta veze usluge ako govorimo o otpornosti na greške i sveli smo to na replikacije?
Где тренутно радите?
Da li je nakon implementacije Elasticsearch bilo nekakvog povratnog informacija od korisnika ili tehničke podrške?
Šta čini sistem visokog opterećenja? Osnovano na vašem iskustvu.
Да ли имате војну легитимацију?
glavni paket uvoz ( "fmt" ) funkcija main() { c := make(chan string, 1) go fmt.Println(<-c) c <- "Zdravo Svete!" fmt.Println("Izlaz!") } fatalna greška: sve gorutine su uspavane - deadlock! goroutine 1 [primanje kanala]: main.main() /tmp/sandbox[phone]/prog.go:10 +0x3a Program je završio: status 2.
Od koje sume razmatrate ponudu?
главни пакет func main() { c := make(chan int) за опсег 3 { select { подразумевано: println(1) случај <-c: println(2) случај c <- 1: println(3) } } }
пакет главни импорт ( "fmt" ) функција главна() { c := make(chan string) го fmt.Println(<-c) c <- "Hello World!" fmt.Println("Излаз!") }
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() }
glavni paket uvozi ( "fmt" ) funkcija main() { c := make(chan string) goreutina go fmt.Println(<-c) c <- "Zdravo svete!" fmt.Println("Izlaz!") } fatali error: svi gorutini spavaju - deadlock! goroutine 1 [primanje kanala]: main.main() /tmp/sandbox[phone]/prog.go:10 +0x3a Program je završio: status 2.
Где сада живите?
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 }