Я думаю, что вы неправильно понимаете постоянный код.
Но каналы блокируют поток, только если им нечего выводить или они заполнены.И каналы могут быть заполнены только, если вы укажете размер.
Я также не рекомендую использовать один и тот же канал для ввода и вывода для функции
При вашем текущем методе вы можете столкнуться с проблемами здесь
cubeChan <- testNum
fmt.Println("[main] resuming (8)")
fmt.Println("[main] reading from channels (9)")
squareVal, cubeVal := <-squareChan, <-cubeChan
Если ваша функция куба слишком медленная по любой возможной причине, то testNum, который вы добавляете в cubechan, может быть немедленно удален с этой строкой здесь
squareVal, cubeVal := <-squareChan, <-cubeChan