package
0.0.0-20240726051332-daefc61aa0cc
Repository: https://github.com/chandrareddyp/golang.git
Documentation: pkg.go.dev

# README

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
}

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 amount of time.

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 Mailio database.

Complete the saveBackups function.

It should read values from the snapshotTicker and saveAfter channels simultaneously.

  • If a value is received from snapshotTicker, call takeSnapshot()
  • If a value is received from saveAfter, call saveSnapshot() and return from the function: you're done.
  • If neither channel has a value ready, call waitForData() and then time.Sleep() for 500 milliseconds. After all, we want to show in the logs that the snapshot service is running.