У меня есть пакет для работы с сессиями. Сейчас они хранятся в болте но если я захочу к примеру перейти на редис то необходимо будет править код. Я сделал Api для роботы с хранилищем
type SessidFileDriver struct {
Get func(id string) (string, bool)
Set func(id, data string) error
Del func(id string) error
Up func(id, data string) error
}
Потом сделал 2 функции. Одна смотрит наружу и принимает 1 параметр
func(SessidFileDriver)
. Отправляет функции в глобальную переменную. И вторая локальная для получения функций в любом месте. Потом сделал я драйвер для Bolt и в методе New просто устанавливаю функции для роботы с бд. Потом если захочу очень просто применю любое из хранилищ.