we may need to do streaming for few things while working with large scale systems like calling multiple API's whenever required and store it in cache if it is frequently used data etc... for these kind of things we may not need to create functions and call them whenever it is needed.Especially when you want to deal data asynchronously.In this case we can simply create a stream and read data from stream whenever it is required.
For readers code will be simple & clean đź‘Ť.
updated basic stream... please go thru the code below with explanation and let me know if any doubts / suggestions / mistakes in my code .
package main
import (
"fmt"
"math/rand"
)
func main() {
streamingDataUsingChannelAndGoRoutines()
}
func streamingDataUsingChannelAndGoRoutines() {
// send signal to stop channel once you are done with streaming the data (optional)(have to handled by stream owner)
stop := make(chan bool)
// it will return read only channel for readers
publisher := stream(stop)
read(publisher)
}
// it will return read only channel so it will not block the execution / it will not wait to write something into channel/avoids dead lock
func stream(stop <-chan bool) <-chan int {
// unbuffered channel to stream data
// this will useful when you want stream live data when ever required
//ch := make(chan int)
// buffered channel to stream data
// this will be useful when you want to store some data in advance in buffer or cache
// ans use whenever it is required directly from buffer
ch := make(chan int,2)
// this go func will run in background and push data consistently to the channel
go func() {
// closing the channel once streaming gets stop request
defer close(ch)
for {
select {
case <-stop:
return
case ch <- rand.Int(): // eg use case:- we do an api call and store the data here
}
}
}()
return ch
}
// reader
func read(value <-chan int) {
// iterating/reading the data for 5 times
for i := 1; i <= 5; i++ {
// we can read from channel stream any number of times
fmt.Println(<-value, <-value, i)
}
}
please follow medium for interesting things
Top comments (0)