package main func main() { c := make(chan int, 1) for range 3 { select { default: println(1) case <-c: println(2) case 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 көмегімен транзакцияларды тез іздеу үшін жүйе жасадың деп айтасың. Бұл не, ол қанша транзакцияны өңдейді және оның қандай пайдасы бар?
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: } }() }
Ақырында, қай шешімдерді таңдадыңыз? ClickHouse, ELK және тағы қандай үшіншісі?
Қазіргі уақытта қайда жұмыс істеп жатырсыз?
Elasticsearch-ті енгізгеннен кейін пайдаланушылардан немесе техникалық қолдау қызметінен қандай да бір өнімдік кері байланыс болды ма?
Жүйені жоғары жүктемелі ететін не? Өз біліміңізге сүйене отырып.
Сізде әскери билеттің бар ма?
Қандай сомадан бастап ұсынысты қарастырасыз?
package main import ( "fmt" ) func main() { c := make(chan string, 1) go fmt.Println(<-c) c <- "Hello World!" fmt.Println("Exit!") } фаталь қате: барлық горутиндер ұйықтап қалды - өлім тырнағы! goroutine 1 [chan receive]: main.main() /tmp/sandbox[phone]/prog.go:10 +0x3a Бағдарлама шықты: күйі 2.
package main func main() { c := make(chan int) for range 3 { select { default: println(1) case <-c: println(2) case c <- 1: println(3) } } }
package main import ( "fmt" ) func main() { c := make(chan string) go fmt.Println(<-c) c <- "Hello World!" fmt.Println("Exit!") }
Қызметтермен не қатысы бар, егер біз сенімділіктің жоғары болуын айтып отырсақ және оны репликаларға дейін қысқартсақ?
Берілген Go кодын қарап шығыңыз және қандай да бір мәселелер немесе жақсартуларды анықтаңыз.
package main import ( "fmt" ) func main() { c := make(chan string) go fmt.Println(<-c) c <- "Hello World!" fmt.Println("Exit!") } қате: барлық горутиндер ұйқыда - өліlock! 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 }