1. db, err := sql.Open() требуется вызвать один раз, нет нужды на каждый запрос писать этот кусок кода
2. panic(err.Error()) - падать приложение в паник плохая практика, если вам нужен некий комплект данных, то сделайте функцию или метод который возвращает данные и ошибку (если есть)
3. log.Fatal(err) - так много логов вам не нужно. Суть в том что если вы получили ошибку, то вам нужно завершать текущий блок кода, а не продолжать его дальше. Ведь если вы не смогли получить данные из базы, то бегать по данным вам так же не нужно.
Пример того как это можно оформить
play.golang.org/p/polc_jwrF7 правда я не использовал реальный модуль для MySQL и часть кода не дописано, так как это вы уже как-нибудь сами.