Sobes.tech

Golang

fő csomag func main() { c := make(chan int, 1) 3 alkalommal ciklus { select { alapértelmezett: println(1) eset <-c: println(2) eset c <- 1: println(3) } } }

267

```go func fail() { panic("Sikertelen!") } func main() { fmt.Println("Kezdet!") 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("Vége!") } ```

223

Miért az Elasticsearch-et választottátok? Milyen egyéb lehetőségek voltak? Valamit választottatok vagy az ELK már létezett?

209

Azt mondod, hogy az Elasticsearch segítségével készítettél egy gyors tranzakciókereső eszközt. Mi ez, hány tranzakció van benne, és mi ennek a haszna?

184

func fetch(ctx context.Context, u User) (string, error) { // hálózaton valamit csinálunk time.Sleep(time.Millisecond * 10) // késleltetés szimulálása return u.Name, nil //return "", errors.New("valamilyen hiba") } 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

Az Elasticsearch bevezetése után volt valamilyen termék visszacsatolás a felhasználóktól vagy a technikai támogatástól?

171

fő csomag import ( "fmt" ) func main() { c := make(chan string, 1) go fmt.Println(<-c) c <- "Helló Világ!" fmt.Println("Kimenet!") } fatális hiba: minden goroutine alvó állapotban - deadlock! goroutine 1 [csatorna fogadás]: main.main() /tmp/sandbox[phone]/prog.go:10 +0x3a A program kilépett: státusz 2.

158

fő csomag func main() { c := make(chan int) 3 alkalommal { select { alapértelmezett: println(1) eset <-c: println(2) eset c <- 1: println(3) } } }

157

főcsomag import ( "fmt" ) func main() { c := make(chan string) go fmt.Println(<-c) c <- "Hello World!" fmt.Println("Kilépés!") }

156

Mi közük van a szolgáltatásoknak, ha a hibátűrést beszéljük, és azt replikákra redukáltuk?

149

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

fő csomag import ( "fmt" ) func main() { c := make(chan string) go fmt.Println(<-c) c <- "Helló Világ!" fmt.Println("Kimenet!") } fatális hiba: minden goroutine alvó állapotban van - deadlock! goroutine 1 [csatorna fogadása]: main.main() /tmp/sandbox[phone]/prog.go:10 +0x3a A program kilépett: státusz 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 }

137
/2