As an Objective-C developer you can think of channels similarly to NSNotification s. You pass values to a certain channel, and it responds accordingly, as you’ve set it up to respond. import ( "fmt" "time" ) func main ( ) { ok := make ( chan bool , 1 ) go doSomething ( ok ) fmt . Tests live in the same package, so you don’t have to worry about exposing any variables just for your test cases’ sake.