Sobes.tech

основен пакет func main() { c := make(chan int, 1) за диапазон 3 { избор { по подразбиране: println(1) случай <-c: println(2) случай c <- 1: println(3) } } }

267

```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("Край!") } ```

225

Защо избрахте Elasticsearch? Какви бяха вариантите? Избрахте ли нещо или ELK вече беше наличен?

211

Имаш ли въпроси относно проектите или условията на работа?

206

Казваш, че с Elasticsearch си създал инструмент за бързо търсене на транзакции. Какво е това, колко транзакции има и каква е ползата от това?

184

В крайна сметка, от кои решения избрахте? ClickHouse, ELK и какво още?

184

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: } }() }

182

Имаше ли някакъв продуктен отзив от потребителите или от службата за техническа поддръжка след внедряването на Elasticsearch?

171

Какво прави една система високонагружена? Въз основа на вашия опит.

168

главен пакет импортиране ( "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.

158

основен пакет func main() { c := make(chan int) за диапазон 3 { select { по подразбиране: println(1) случай <-c: println(2) случай c <- 1: println(3) } } }

157

пакет главен импортиране ( "fmt" ) функция main() { c := make(chan string) отидете fmt.Println(<-c) c <- "Hello World!" fmt.Println("Изход!") }

156

Какво общо имат услугите, ако говорим за отказоустойчивост и я сведохме до реплики?

149

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() }

147

основен пакет внос ( "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.

147

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 }

137
/2