publish channels

This commit is contained in:
Mark McGranaghan 2012-10-11 08:10:43 -07:00
parent deafc3a0bf
commit a5156639ae
3 changed files with 28 additions and 2 deletions

View File

@ -27,7 +27,7 @@ Maps
# OK Guards
Goroutines
# Concurrent Goroutines
# Channels
Channels
# Channel Buffering
# Channel Directions
# Synchronization

View File

@ -1,10 +1,26 @@
// _Channels_ are the pipes that connect goroutines in a
// concurrent Go program. You can send values into
// channels from one goroutine and receive those values
// into another goroutine.
package main
import "fmt"
func main() {
var messages chan string = make(chan string)
// Create a new channel with `make(chan val-type)`.
// Channels are typed by the values they convey.
messages := make(chan string)
// _Send_ a value into a channel using the `channel <-`
// syntax. Here we send `"ping"` to the `messages`
// channel we made above, from a new goroutine.
go func() { messages <- "ping" }()
// The `<-channel` syntax _receives_ a value from the
// channel. Here we'll receive the `"ping"` message
// we sent above and print it out.
msg := <-messages
fmt.Println(msg)
}

View File

@ -0,0 +1,10 @@
# When we run the program the `"ping"` message is
# succesfully passed from one goroutine to another via our
# channel.
$ go run channels.go
ping
# By default sends and receives block until both the
# sender and receiver are ready. This property allowed
# us to wait at the end of our program for the `"ping"`
# message without having to use any other synchronization.