We're sorry but this app doesn't work properly without JavaScript enabled. Please enable it to continue.

This lesson's interactive features are locked, please to keep using them

Select Default Case

The default case in a select statement executes immediately if no other channel has a value ready. A default case stops the select statement from blocking.

select {
case v := <-ch:
    // use v
default:
    // receiving from ch would block
    // so do something else
}

Ignoring Channels

Sometimes you want to ignore a channel's value. You can do this by not binding it to a variable:

select {
case <-ch:
    // event received; value ignored
default:
    // so do something else
}

Alternatively, you can use the blank identifier _ to ignore the value:

select {
case _ = <-ch:
    // event received; value ignored
default:
    // so do something else
}

Tickers

  • time.Tick() is a standard library function that returns a channel that sends a value on a given interval.
  • time.After() sends a value once after the duration has passed.
  • time.Sleep() blocks the current goroutine for the specified duration of time.

The functions take a time.Duration as an argument. For example:

time.Tick(500 * time.Millisecond)

If you don't add time.Millisecond (or another unit), it will default to nanoseconds. That's – taking a wild guess here – probably faster than you want it to be.

Read-Only Channels

A channel can be marked as read-only by casting it from a chan to a <-chan type. For example:

func main() {
    ch := make(chan int)
    readCh(ch)
}

func readCh(ch <-chan int) {
    // ch can only be read from
    // in this function
}

Write-Only Channels

The same goes for write-only channels, but the arrow's position moves.

func writeCh(ch chan<- int) {
    // ch can only be written to
    // in this function
}

Assignment

Like all good back-end engineers, we frequently save backup snapshots of the Textio database.

Complete the saveBackups function.

It should use a loop to read values from the snapshotTicker and saveAfter channels simultaneously and continuously.