Categorygithub.com/ch-arham/golangfcc-learn-golang-assets-maincourse13-channelsexercises8-select_default
package
0.0.0-20240402023223-5f8e0e377ad7
Repository: https://github.com/ch-arham/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
, calltakeSnapshot()
- If a value is received from
saveAfter
, callsaveSnapshot()
andreturn
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.