peamine pakett func main() { c := make(chan int, 1) for range 3 { select { vaikimisi: println(1) juhtum <-c: println(2) juhtum c <- 1: println(3) } } }
Golang
```go func fail() { panic("Ebaõnn!") } func main() { fmt.Println("Algus!") 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("Lõpp!") } ```
Miks valisite Elasticsearch? Kā bija citas iespējas? Vai izvēlējāties kaut ko vai ELK jau bija pieejams?
Kas teil on küsimusi projektide või töötingimuste kohta?
Lõpuks, millistest lahendustest te valisite? ClickHouse, ELK ja mis veel?
Sa ütlesid, et Elasticsearchi abil loodud kiirete tehingute otsingu tööriist. Mis see on, kui palju tehinguid seal on ja milline on selle kasu?
func fetch(ctx context.Context, u User) (string, error) { // jotain teemme verkossa time.Sleep(time.Millisecond * 10) // viiveen simulointi return u.Name, nil //return "", errors.New("jokin virhe") } 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: } }() }
Mis on se seotud teenustega, kui räägime tõrke taluvusest ja oleme selle vähendanud replikatsioonidele?
Kus te praegu töötate?
Pärast Elasticsearch'i kasutuselevõttu kas oli kasutajatelt või tehnilise toe teenuselt tagasisidet?
Mis teeb süsteemi suure koormusega? Oma kogemusele tuginedes.
Kas teil on sõjaväepilet?
peamine pakett import ( "fmt" ) func main() { c := make(chan string, 1) go fmt.Println(<-c) c <- "Hello World!" fmt.Println("Exit!") } fatali viga: kõik gorutined magavad - deadlock! goroutine 1 [kanali vastuvõtt]: main.main() /tmp/sandbox[phone]/prog.go:10 +0x3a Programmid lõpetasid töö: olek 2.
Millest summast te kaalute pakkumist?
peamine pakett func main() { c := make(chan int) 3 tsüklit { valik { vaikimisi: println(1) juhtum <-c: println(2) juhtum c <- 1: println(3) } } }
peamine pakett import ( "fmt" ) func main() { c := make(chan string) go fmt.Println(<-c) c <- "Hello World!" fmt.Println("Välju!") }
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() }
peamine pakett import ( "fmt" ) func main() { c := make(chan string) go fmt.Println(<-c) c <- "Tere, maailm!" fmt.Println("Väljund!") } fatali viga: kõik gorutinid magavad - deadlock! goroutine 1 [kanali vastuvõtt]: main.main() /tmp/sandbox[phone]/prog.go:10 +0x3a Programm lõpetas: olek 2.
Kus te praegu elate?
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 }