Last active
August 27, 2021 16:38
-
-
Save praveen001/12bcd71a9b53f187376db0c6db64b551 to your computer and use it in GitHub Desktop.
How to Pass Database Connection into Controllers in Golang
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package controllers | |
import ( | |
"fmt" | |
"net/http" | |
"github.com/techinscribed/repository-db/models" | |
) | |
// BaseHandler will hold everything that controller needs | |
type BaseHandler struct { | |
userRepo models.UserRepository | |
} | |
// NewBaseHandler returns a new BaseHandler | |
func NewBaseHandler(userRepo models.UserRepository) *BaseHandler { | |
return &BaseHandler{ | |
userRepo: userRepo, | |
} | |
} | |
// HelloWorld returns Hello, World | |
func (h *BaseHandler) HelloWorld(w http.ResponseWriter, r *http.Request) { | |
if user, err := h.userRepo.FindByID(1); err != nil { | |
fmt.Println("Error", user) | |
} | |
w.Write([]byte("Hello, World")) | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package sqldb | |
import "database/sql" | |
// DB is a global variable to hold db connection | |
var DB *sql.DB | |
// ConnectDB opens a connection to the database | |
func ConnectDB() { | |
db, err := sql.Open("mysql", "username:password@/dbname") | |
if err != nil { | |
panic(err.Error()) | |
} | |
DB = db | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"fmt" | |
"net/http" | |
"github.com/techinscribed/repository-db/controllers" | |
"github.com/techinscribed/repository-db/repositories" | |
"github.com/techinscribed/repository-db/sqldb" | |
) | |
func main() { | |
db := sqldb.ConnectDB() | |
// Create repos | |
userRepo := repositories.NewUserRepo(db) | |
h := controllers.NewBaseHandler(userRepo) | |
http.HandleFunc("/", h.HelloWorld) | |
s := &http.Server{ | |
Addr: fmt.Sprintf("%s:%s", "localhost", "5000"), | |
} | |
s.ListenAndServe() | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package repositories | |
import ( | |
"database/sql" | |
"github.com/techinscribed/repository-db/models" | |
) | |
// UserRepo implements models.UserRepository | |
type UserRepo struct { | |
db *sql.DB | |
} | |
// NewUserRepo .. | |
func NewUserRepo(db *sql.DB) *UserRepo { | |
return &UserRepo{ | |
db: db, | |
} | |
} | |
// FindByID .. | |
func (r *UserRepo) FindByID(ID int) (*models.User, error) { | |
return &models.User{}, nil | |
} | |
// Save .. | |
func (r *UserRepo) Save(user *models.User) error { | |
return nil | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package sqldb | |
import "database/sql" | |
// ConnectDB opens a connection to the database | |
func ConnectDB() *sql.DB { | |
db, err := sql.Open("mysql", "username:password@/dbname") | |
if err != nil { | |
panic(err.Error()) | |
} | |
return db | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package controllers | |
import ( | |
"fmt" | |
"net/http" | |
"github.com/techinscribed/global-db/sqldb" | |
) | |
// HelloWorld returns Hello, World | |
func HelloWorld(w http.ResponseWriter, r *http.Request) { | |
if err := sqldb.DB.Ping(); err != nil { | |
fmt.Println("DB Error") | |
} | |
w.Write([]byte("Hello, World")) | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package controllers | |
import ( | |
"database/sql" | |
"fmt" | |
"net/http" | |
) | |
// BaseHandler will hold everything that controller needs | |
type BaseHandler struct { | |
db *sql.DB | |
} | |
// NewBaseHandler returns a new BaseHandler | |
func NewBaseHandler(db *sql.DB) *BaseHandler { | |
return &BaseHandler{ | |
db: db, | |
} | |
} | |
// HelloWorld returns Hello, World | |
func (h *BaseHandler) HelloWorld(w http.ResponseWriter, r *http.Request) { | |
if err := h.db.Ping(); err != nil { | |
fmt.Println("DB Error") | |
} | |
w.Write([]byte("Hello, World")) | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"fmt" | |
"net/http" | |
"github.com/techinscribed/struct-db/controllers" | |
"github.com/techinscribed/struct-db/sqldb" | |
) | |
func main() { | |
db := sqldb.ConnectDB() | |
h := controllers.NewBaseHandler(db) | |
http.HandleFunc("/", h.HelloWorld) | |
s := &http.Server{ | |
Addr: fmt.Sprintf("%s:%s", "localhost", "5000"), | |
} | |
s.ListenAndServe() | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package models | |
// User .. | |
type User struct { | |
Name string | |
} | |
// UserRepository .. | |
type UserRepository interface { | |
FindByID(ID int) (*User, error) | |
Save(user *User) error | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment