golang channel code example
Example 1: go chanels
ch := make(chan int) // create a channel of type int
ch <- 42 // Send a value to the channel ch.
v := <-ch // Receive a value from ch
// Non-buffered channels block. Read blocks when no value is available, write blocks until there is a read.
// Create a buffered channel. Writing to a buffered channels does not block if less than <buffer size> unread values have been written.
ch := make(chan int, 100)
close(ch) // closes the channel (only sender should close)
// read from channel and test if it has been closed
v, ok := <-ch
// if ok is false, channel has been closed
// Read from channel until it is closed
for i := range ch {
fmt.Println(i)
}
// select blocks on multiple channel operations, if one unblocks, the corresponding case is executed
func doStuff(channelOut, channelIn chan int) {
select {
case channelOut <- 42:
fmt.Println("We could write to channelOut!")
case x := <- channelIn:
fmt.Println("We could read from channelIn")
case <-time.After(time.Second * 1):
fmt.Println("timeout")
}
}
Example 2: golang channel
package main
import (
"encoding/json"
"fmt"
"runtime"
"time"
)
type Profile struct {
Name string `json:"name"`
Age uint `json:"age"`
}
func Publisher(data string, channel chan interface{}) {
channel <- string(data)
}
func Subscribe(channel chan interface{}) {
profile := <-channel
fmt.Println(profile)
}
func main() {
// set core max to use for gorutine
runtime.GOMAXPROCS(2)
// init compose type data
profileChannel := make(chan interface{})
// set value for struct
var profile Profile
profile.Name = "john doe"
profile.Age = 23
// convert to json
toJson, _ := json.Marshal(profile)
// sending channel data
go Publisher(string(toJson), profileChannel)
// get channel data
go Subscribe(profileChannel)
// delay gorutine 1000 second
time.Sleep(time.Second * 1)
}
Example 3: golang make chan
ch <- v // Send v to channel ch.
v := <-ch // Receive from ch, and
// assign value to v.