əsas paket func main() { c := make(chan int, 1) 3 dəfə dövr { seçin { default: println(1) case <-c: println(2) case c <- 1: println(3) } } }
Golang
```go func fail() { panic("Uğursuzluq!") } func main() { fmt.Println("Başlanğıc!") 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("Bitdi!") } ```
Niyə Elasticsearch seçdiniz? Ümumiyyətlə hansı variantlar var idi? Bir şey seçdinizmi yoxsa ELK artıq mövcud idi?
Layihələr və ya iş şərtləri haqqında suallarınız var mı?
Elasticsearch ilə sürətli əməliyyat axtarışı üçün bir şey yaratdığını söyləyirsən. Bu nədir, neçə əməliyyat var və bunun faydası nədir?
Nəticədə hansı həlləri seçdiniz? ClickHouse, ELK və başqa nə?
func fetch(ctx context.Context, u User) (string, error) { // bir şəbəkədə nəsə edirik time.Sleep(time.Millisecond * 10) // gecikməni təqlid edir return u.Name, nil //return "", errors.New("bəzi xəta") } 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: } }() }
Xidmətlərin nə əlaqəsi var, əgər biz uğursuzluğa davamlılıq və onu replikalara endirmə haqqında danışırıqsa?
Hazırda harada işləyirsiniz?
Elasticsearch tətbiqindən sonra istifadəçilərdən və ya texniki dəstək xidmətindən hər hansı bir məhsul geribildirimi oldu mu?
Yüksək yüklü sistemi nə edir? Öz təcrübənizə əsaslanaraq.
Hərbi biletiniz varmı?
əsas paket import ( "fmt" ) func main() { c := make(chan string, 1) go fmt.Println(<-c) c <- "Salam Dünya!" fmt.Println("Çıxış!") } ölüm xətası: bütün goroutinlar yuxuda - deadlock! goroutine 1 [kanal qəbul]: main.main() /tmp/sandbox[phone]/prog.go:10 +0x3a Proqram çıxışı: vəziyyət 2.
Hansı məbləğdən təklifə baxırsınız?
əsas paket func main() { c := make(chan int) 3 dövrü üçün { seçin { default: 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!") }
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() }
əsas paket import ( "fmt" ) fun main() { c := make(chan string) go fmt.Println(<-c) c <- "Salam Dünya!" fmt.Println("Çıxış!") } fatal xəta: bütün goroutinlar yuxuya getdi - deadlock! goroutine 1 [kanal qəbul]: main.main() /tmp/sandbox[phone]/prog.go:10 +0x3a Proqram çıxış etdi: vəziyyət 2.
İndiki vaxtda harada yaşayırsınız?
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 }