бастаи бастаи асосӣ 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 <- "Salom Dunyo!" fmt.Println("Chiqish!") } фаталь хатолик: барча горутинлар уйда - deadlock! goroutine 1 [канал қабул қилиш]: main.main() /tmp/sandbox[phone]/prog.go:10 +0x3a Дастур чиқди: ҳолат 2.
баст paket func main() { c := make(chan int) барои доираи 3 { select { default: println(1) case <-c: println(2) case 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 <- "Salom dunyo!" fmt.Println("Chiqish!") } фатал хато: барча горутинлар уйда - 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 }