Можно сделать следующим образом:
в отдельном пакете, пусть это будет database сделать следующее:
package database
import (
"fmt"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/sqlite"
"log"
"os"
)
var db *gorm.DB // объявляем переменную для работы с БД
func init() {
// при обращении к пакету database будет совершена попытка подключения к БД
conn, err := gorm.Open("sqlite3", "database.db")
if err != nil {
log.Println(fmt.Sprintf("database error: %v", err))
} else {
log.Println("database connected")
}
// записываем результат соединения в ранее объявленную переменную
db = conn
}
// Создаем глобальную функцию с результатом соединения, чтоб можно было работать с БД из любого пакета
func Connector() *gorm.DB {
return db
}
Далее в main.go прописать следующее:
package main
import (
"go-tmp/project/database"
"log"
)
func main() {
// объявляем анонимную функцию, которая закроет соединения с БД при завершении работы приложения
defer func() {
if err := database.Connector().Close(); err != nil {
log.Println(err)
}
}()
}
Правильнее некуда :)