Friday, February 5, 2021

GoLang - Concurrency - channels for queueing

 package main


import (
    "fmt"
    "os"
    "time"
)

func add(a, b float64float64 {
    return a + b
}

func pause(sec int) {
    for i := 0; i <= sec; i++ {
        fmt.Println(" tic tic ", i)
        time.Sleep(time.Second / 4)
    }
}

func onetoten() {
    for i := 1; i <= 10; i++ {
        fmt.Print(" ", i)
        time.Sleep(time.Second / 4)
    }
}

func backg(msg chan string) {
    for {
        // wait for order from main func
        fmt.Println("print from inside backg goroutine: ", <-msg)
        // got the message now do something
        onetoten()
        pause(5)
    }
    //fmt.Println("The End!")
}

func main() {
    //fmt.Println(add(2, 3))
    //go pause(5)
    var mystring string
    mychannel := make(chan string5)
    defer close(mychannel)
    mychannel <- "Initial value for channel"
    go backg(mychannel)

    for {
        fmt.Println("\r\n Enter Text:")
        fmt.Scanln(&mystring)
        fmt.Printf("%s", mystring)
        mychannel <- mystring
        if mystring == "q" {
            os.Exit(0)
        }
    }

}

No comments:

Post a Comment