Sobes.tech

Golang

главни пакет func main() { c := make(chan int, 1) за опсег 3 { изабери { подразумевано: println(1) случај <-c: println(2) случај c <- 1: println(3) } } }

267

```go func fail() { panic("Neuspeh!") } func main() { fmt.Println("Početak!") 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("Kraj!") } ```

225

Zašto ste odabrali Elasticsearch? Koje su bile alternative? Da li ste nešto birali ili je ELK već bio prisutan?

211

Kažeš da si pomoću Elasticsearch napravio alatku za brzo pretraživanje transakcija. Šta je to, koliko transakcija ima i kakva je od toga korist?

184

func fetch(ctx context.Context, u User) (string, error) { // nešto radimo u mreži time.Sleep(time.Millisecond * 10) // simulacija kašnjenja return u.Name, nil //return "", errors.New("neka greška") } 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: } }() }

182

Šta veze usluge ako govorimo o otpornosti na greške i sveli smo to na replikacije?

179

Da li je nakon implementacije Elasticsearch bilo nekakvog povratnog informacija od korisnika ili tehničke podrške?

171

glavni paket uvoz ( "fmt" ) funkcija main() { c := make(chan string, 1) go fmt.Println(<-c) c <- "Zdravo Svete!" fmt.Println("Izlaz!") } fatalna greška: sve gorutine su uspavane - deadlock! goroutine 1 [primanje kanala]: main.main() /tmp/sandbox[phone]/prog.go:10 +0x3a Program je završio: status 2.

160

главни пакет func main() { c := make(chan int) за опсег 3 { select { подразумевано: println(1) случај <-c: println(2) случај c <- 1: println(3) } } }

157

пакет главни импорт ( "fmt" ) функција главна() { c := make(chan string) го fmt.Println(<-c) c <- "Hello World!" fmt.Println("Излаз!") }

156

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

147

glavni paket uvozi ( "fmt" ) funkcija main() { c := make(chan string) goreutina go fmt.Println(<-c) c <- "Zdravo svete!" fmt.Println("Izlaz!") } fatali error: svi gorutini spavaju - deadlock! goroutine 1 [primanje kanala]: main.main() /tmp/sandbox[phone]/prog.go:10 +0x3a Program je završio: status 2.

147

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 }

139
/2