Golang Channel Function Parameters

GoGoBeginner
Practice Now

This tutorial is from open-source community. Access the source code

Introduction

This lab aims to test your understanding of using channels as function parameters in Golang.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL go(("`Go`")) -.-> go/ConcurrencyGroup(["`Concurrency`"]) go/ConcurrencyGroup -.-> go/channels("`Channels`") subgraph Lab Skills go/channels -.-> lab-15457{{"`Golang Channel Function Parameters`"}} end

Channel Directions

The problem to be solved in this lab is to modify the given code to ensure that the channels used as function parameters are specified to only send or receive values.

  • Basic knowledge of Golang
  • Understanding of channels and their usage in Golang
$ go run channel-directions.go
passed message

There is the full code below:

// When using channels as function parameters, you can
// specify if a channel is meant to only send or receive
// values. This specificity increases the type-safety of
// the program.

package main

import "fmt"

// This `ping` function only accepts a channel for sending
// values. It would be a compile-time error to try to
// receive on this channel.
func ping(pings chan<- string, msg string) {
	pings <- msg
}

// The `pong` function accepts one channel for receives
// (`pings`) and a second for sends (`pongs`).
func pong(pings <-chan string, pongs chan<- string) {
	msg := <-pings
	pongs <- msg
}

func main() {
	pings := make(chan string, 1)
	pongs := make(chan string, 1)
	ping(pings, "passed message")
	pong(pings, pongs)
	fmt.Println(<-pongs)
}

Summary

In this lab, you learned how to specify if a channel is meant to only send or receive values, which increases the type-safety of the program.

Other Go Tutorials you may like