Многие советуют "чистый код", но как по мне она тяжелая для понимания, "Паттерны проектирования" банды четырех (хоть она и не полностью применима в случае go). Ещё все хвалят "clean architecture" Мартина, но и эта не очень базовая. А по поводу closures, то в том примере суть что функция - переменная (first-class function) то бишь ты её можешь таскать за собой, она может иметь состояние (в примере фибоначи базовое состояние задаётся при первом вызове, когда лямбда создается, и меняется при последующих вызовах лямбды). Там лямбда является чистым примером command паттерна. Если где ошибся - поправьте