Учебник старый? В последних версиях Go, map очень любит паниковать при любой непонятной ситуации.
Возможно вместо мутекса и map иногда эффективнее будет
https://golang.org/pkg/sync/#Map
Автор прав, состояния гонки после e := memo.cache[key] действительно нет. Но при одном большом но - GOMAXPROCS=1 (так было до go1.5), далее мы запросто можем получить concurrent read-write + panic или undefined behavior.
Concurrency очень сложная штука. Лучше всего эту проблему решили в Rust, но на нем больно писать.