Sobes.tech

Golang

pakiet główny func main() { c := make(chan int, 1) for range 3 { select { default: println(1) case <-c: println(2) case c <- 1: println(3) } } }

368

```go func fail() { panic("Niepowodzenie!") } func main() { fmt.Println("Start!") 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("Koniec!") } ```

227

Dlaczego wybrali Elasticsearch? Jakie były inne opcje? Coś wybierali czy ELK już był?

211

Czym są usługi, jeśli mówimy o odporności na awarie i sprowadziliśmy to do replik?

199

Mówisz, że za pomocą Elasticsearch stworzyłeś narzędzie do szybkiego wyszukiwania transakcji. Czym jest to, ile transakcji tam jest i jaka jest z tego korzyść?

186

pakiet główny import ( "fmt" ) func main() { c := make(chan string, 1) go fmt.Println(<-c) c <- "Witaj świecie!" fmt.Println("Wyjście!") } błąd krytyczny: wszystkie goroutine są uśpione - deadlock! goroutine 1 [odbiór kanału]: main.main() /tmp/sandbox[phone]/prog.go:10 +0x3a Program zakończył się: status 2.

186

func fetch(ctx context.Context, u User) (string, error) { // coś robimy w sieci time.Sleep(time.Millisecond * 10) // symulacja opóźnienia return u.Name, nil //return "", errors.New("jakiś błąd") } 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: } }() }

184

Czy po wdrożeniu Elasticsearch pojawiły się jakieś opinie od użytkowników lub działu wsparcia technicznego?

175

Co sprawia, że system jest obciążony wysokim obciążeniem? Opierając się na swojej wiedzy.

171

pakiet główny func main() { c := make(chan int) for range 3 { select { domyślny: println(1) case <-c: println(2) case c <- 1: println(3) } } }

159

package main import ( "fmt" ) func main() { c := make(chan string) go fmt.Println(<-c) c <- "Hello World!" fmt.Println("Exit!") }

158

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 }

151

pakiet główny import ( "fmt" ) func main() { c := make(chan string) go fmt.Println(<-c) c <- "Witaj świecie!" fmt.Println("Wyjście!") } błąd krytyczny: wszystkie goroutine są uśpione - deadlock! goroutine 1 [odbiór kanału]: main.main() /tmp/sandbox[phone]/prog.go:10 +0x3a Program zakończył się: status 2.

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

149
/2