mirror of
https://github.com/bootdotdev/fcc-learn-golang-assets.git
synced 2025-12-14 09:11:16 +00:00
1.8 KiB
1.8 KiB
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, calltakeSnapshot() - If a value is received from
saveAfter, callsaveSnapshot()andreturnfrom 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.