pakiet główny func main() { c := make(chan int, 1) for range 3 { select { default: println(1) case <-c: println(2) case c <- 1: println(3) } } }
Golang
```go func fail() { panic("Niepowodzenie!") } func main() { fmt.Println("Start!") 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!") } ```
Dlaczego wybrali Elasticsearch? Jakie były inne opcje? Coś wybierali czy ELK już był?
Czy masz pytania dotyczące projektów lub warunków pracy?
Czym są usługi, jeśli mówimy o odporności na awarie i sprowadziliśmy to do replik?
Ostatecznie, z jakich rozwiązań wybierali? ClickHouse, ELK i co jeszcze?
Mówisz, że za pomocą Elasticsearch stworzyłeś narzędzie do szybkiego wyszukiwania transakcji. Czym jest to, ile transakcji tam jest i jaka jest z tego korzyść?
pakiet główny import ( "fmt" ) func main() { c := make(chan string, 1) go fmt.Println(<-c) c <- "Witaj świecie!" fmt.Println("Wyjście!") } błąd krytyczny: wszystkie goroutine są uśpione - deadlock! goroutine 1 [odbiór kanału]: main.main() /tmp/sandbox[phone]/prog.go:10 +0x3a Program zakończył się: status 2.
func fetch(ctx context.Context, u User) (string, error) { // coś robimy w sieci time.Sleep(time.Millisecond * 10) // symulacja opóźnienia return u.Name, nil //return "", errors.New("jakiś błąd") } 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: } }() }
Czy po wdrożeniu Elasticsearch pojawiły się jakieś opinie od użytkowników lub działu wsparcia technicznego?
Gdzie obecnie pracujesz?
Co sprawia, że system jest obciążony wysokim obciążeniem? Opierając się na swojej wiedzy.
Gdzie teraz mieszkasz?
Czy masz legitymację wojskową?
Od jakiej kwoty rozważasz ofertę?
pakiet główny func main() { c := make(chan int) for range 3 { select { domyślny: println(1) case <-c: println(2) case c <- 1: println(3) } } }
package main import ( "fmt" ) func main() { c := make(chan string) go fmt.Println(<-c) c <- "Hello World!" fmt.Println("Exit!") }
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 }
pakiet główny import ( "fmt" ) func main() { c := make(chan string) go fmt.Println(<-c) c <- "Witaj świecie!" fmt.Println("Wyjście!") } błąd krytyczny: wszystkie goroutine są uśpione - deadlock! goroutine 1 [odbiór kanału]: main.main() /tmp/sandbox[phone]/prog.go:10 +0x3a Program zakończył się: status 2.
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() }