негизги пакет 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("Аягына чыкты!") } ```
Элестиксчий тандооңуздун себеби эмне? Башка варианттар болдубу? Эч нерсе тандадыңызбы же 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("Чиқиш!") } фатал хата: барча goroutine-лар уйда - 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" ) функция негизги() { 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 }