Sobes.tech

Golang

galvenais pakotne func main() { c := make(chan int, 1) per range 3 { select { noklusējums: println(1) gadījums <-c: println(2) gadījums c <- 1: println(3) } } }

263

```go func fail() { panic("Neveiks!") } func main() { fmt.Println("Sākums!") 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("Beigas!") } ```

221

Kāpēc izvēlējāties Elasticsearch? Kādas bija citas iespējas? Vai kaut ko izvēlējāties vai jau bija ELK?

209

Tu saki, ka ar Elasticsearch izveidoji rīku ātrai darījumu meklēšanai. Kas tas ir, cik darījumu tur ir un kāda ir no tā peļņa?

182

func fetch(ctx context.Context, u User) (string, error) { // kaut kas darām tīklā time.Sleep(time.Millisecond * 10) // aizkaves imitācija return u.Name, nil //return "", errors.New("kāda kļūda") } 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: } }() }

180

Galu galā, no kādiem risinājumiem jūs izvēlējāties? ClickHouse, ELK un kas vēl?

178

Pēc Elasticsearch ieviešanas vai bija kādi lietotāju vai tehniskās atbalsta dienesta atsauksmes?

169

galvenais pakotne importēt ( "fmt" ) func main() { c := make(chan string, 1) go fmt.Println(<-c) c <- "Sveika, pasaule!" fmt.Println("Išeiti!") } mirtina klaida: visos gorutinos miega - deadlock! goroutine 1 [kanāla saņemšana]: main.main() /tmp/sandbox[phone]/prog.go:10 +0x3a Programa beidzās: stāvoklis 2.

158

galvenais pakotne func main() { c := make(chan int) 3 cikli { select { noklusējuma: println(1) gadījums <-c: println(2) gadījums c <- 1: println(3) } } }

157

galvenais pakotne importēt ( "fmt" ) func main() { c := make(chan string) go fmt.Println(<-c) c <- "Hello World!" fmt.Println("Iziet!") }

156

Kāda ir saistība ar pakalpojumiem, ja mēs runājam par kļūdu toleranci un to esam samazinājuši līdz replikām?

149

galvenais pakets importēt ( "fmt" ) func main() { c := make(chan string) go fmt.Println(<-c) c <- "Sveika, pasaule!" fmt.Println("Išeiti!") } mirtina klaida: visi gorutinai miega - deadlock! goroutine 1 [kanāla saņemšana]: main.main() /tmp/sandbox[phone]/prog.go:10 +0x3a Programma beidzās: stāvoklis 2.

146

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

145

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 }

135
/2