основен пакет func main() { c := make(chan int, 1) за диапазон 3 { избор { по подразбиране: println(1) случай <-c: println(2) случай c <- 1: println(3) } } }
Golang
```go func fail() { panic("Неуспех!") } func main() { fmt.Println("Започване!") 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("Край!") } ```
Защо избрахте Elasticsearch? Какви бяха вариантите? Избрахте ли нещо или ELK вече беше наличен?
Имаш ли въпроси относно проектите или условията на работа?
Казваш, че с Elasticsearch си създал инструмент за бързо търсене на транзакции. Какво е това, колко транзакции има и каква е ползата от това?
В крайна сметка, от кои решения избрахте? ClickHouse, ELK и какво още?
func fetch(ctx context.Context, u User) (string, error) { // нещо правим в мрежата time.Sleep(time.Millisecond * 10) // имитация на забавяне return u.Name, nil //return "", errors.New("някаква грешка") } 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: } }() }
Къде работите в момента?
Имаше ли някакъв продуктен отзив от потребителите или от службата за техническа поддръжка след внедряването на Elasticsearch?
Какво прави една система високонагружена? Въз основа на вашия опит.
Имаш ли военен билет?
От каква сума разглеждате предложението?
главен пакет импортиране ( "fmt" ) функция main() { c := make(chan string, 1) go fmt.Println(<-c) c <- "Здравей свят!" fmt.Println("Изход!") } фатална грешка: всички горутини са заспали - deadlock! goroutine 1 [приемане на канал]: main.main() /tmp/sandbox[phone]/prog.go:10 +0x3a Програмата излезе: статус 2.
основен пакет func main() { c := make(chan int) за диапазон 3 { select { по подразбиране: println(1) случай <-c: println(2) случай c <- 1: println(3) } } }
пакет главен импортиране ( "fmt" ) функция main() { 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() }
основен пакет внос ( "fmt" ) функция main() { c := make(chan string) go fmt.Println(<-c) c <- "Здравей свят!" fmt.Println("Изход!") } фатална грешка: всички горутини спят - deadlock! goroutine 1 [приемане на канал]: main.main() /tmp/sandbox[phone]/prog.go:10 +0x3a Програмата е излязла: статус 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 }