# Go Cheatsheet - Select with Timer & Ticker

## Select

### Select channels with timeout

Use `time.After`

```go
select {
case res := <-ch:
    fmt.Println(res)
case <-time.After(1 * time.Second):
    fmt.Println("timeout 1")
}
```

Or use `time.NewTimer`

```go
timer1 := time.NewTimer(2 * time.Second)
select {
case <-quit:
case <- timer1.C:
    fmt.Println("Timeout 2")
}
```

### Select channels with time interval

Use `time.Tick`

```go
ticker := time.Tick(1 * time.Second)
for i:=0; i<10; i++ {
    select {
    case <- quit:
    case <- ticker:
        fmt.Println("ticker run at", i)
    }
}
```

Or use `time.NewTicker`

```go
ticker := time.NewTicker(2 * time.Second)
for i:=0; i<10; i++ {
    select {
    case <- quit:
    case <- ticker.C:
        fmt.Println("ticker run at", i)
    }
}
```
To stop ticker, use `ticker.Stop()`


