Reputation: 3467
I declare my database connection in my main
package, sort of like this:
package main
var Db *sql.DB
func main() {
var err error
db, err = sql.Open("postgres", "stuff...")
// error handling and more app stuff
}
To begin with I had all of my code in the main
package and I could access the database connection from other files. However, I want to separate code into packages, and now the Db
variable isn't visible anymore.
Is it possible to share it across packages or do I have to add it as a parameter to whatever calls to other packages I have in my main
function?
Upvotes: 1
Views: 3900
Reputation: 19969
I'll share a bit of code currently in one of my apps.
First...
package conf
import (
"github.com/jinzhu/gorm"
_ "github.com/lib/pq"
)
func ConnectDB() *gorm.DB {
db, err := gorm.Open("postgres", /**/)
if err!=nil {
panic(err)
}
db.LogMode(true)
return &db
}
Then....
package model
import (
"github.com/jinzhu/gorm"
)
var DB *gorm.DB
func SetDatabase(db *gorm.DB) {
DB = db
// Some other set up here
}
Finally...
package main
import (
"conf"
"model"
)
func main() {
db := conf.ConnectDB()
model.SetDatabase(db)
// Some other stuff
}
Hope this helps.
Upvotes: 6