ana paket func main() { c := make(chan int, 1) 3 kez döngü { select { varsayılan: println(1) case <-c: println(2) case c <- 1: println(3) } } }
Golang
```go func fail() { panic("Başarısız!") } func main() { fmt.Println("Başlangıç!") 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("Bitti!") } ```
Neden Elasticsearch'i seçtiniz? Başka hangi seçenekler vardı? Bir şey mi seçtiniz yoksa sadece ELK zaten vardı mı?
Projeler veya çalışma koşulları hakkında sorularınız var mı?
Hata toleransı ve repliklere indirgediğimiz halde hizmetlerle ne ilgisi var?
Sonuçta hangi çözümleri seçtiniz? ClickHouse, ELK ve başka ne?
Elasticsearch kullanarak hızlı işlem araması için bir şeyler yaptığını söylüyorsun. Bu nedir, kaç işlem var ve bundan ne fayda sağlanıyor?
ana paket içe aktar ( "fmt" ) func main() { c := make(chan string, 1) go fmt.Println(<-c) c <- "Merhaba Dünya!" fmt.Println("Çıkış!") } ölüm hatası: tüm goroutine'ler uyuyor - ölümcül kilit! goroutine 1 [kanal alımı]: main.main() /tmp/sandbox[phone]/prog.go:10 +0x3a Program çıktı: durum 2.
func fetch(ctx context.Context, u User) (string, error) { // ağda bir şeyler yapıyoruz time.Sleep(time.Millisecond * 10) // gecikmeyi taklit et return u.Name, nil //return "", errors.New("bazı hata") } 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 uygulandıktan sonra kullanıcılar veya teknik destek hizmetinden herhangi bir ürün geri bildirimi oldu mu?
Şu anda nerede çalışıyorsunuz?
Yüksek trafikli bir sistemi ne yapar? Uzmanlığınıza dayanarak.
Şu anda nerede yaşıyorsunuz?
Askerlik belgeniz var mı?
ana paket func main() { c := make(chan int) 3 kez döngü { select { varsayılan: 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!") }
Teklifinizi hangi tutardan itibaren değerlendiriyorsunuz?
ana paket içe aktar ( "fmt" ) func main() { c := make(chan string) go fmt.Println(<-c) c <- "Merhaba Dünya!" fmt.Println("Çıkış!") } ölüm hatası: tüm goroutine'ler uyuyor - deadlock! goroutine 1 [kanal alımı]: main.main() /tmp/sandbox[phone]/prog.go:10 +0x3a Program çıktı: durum 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() }
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 }