I am writing the rest api in golang with the following structure
Handler classes:
type Controller struct {
db daos.IUserDB
}
func NewController(db daos.IUserDB) *Controller{
return &Controller{db:db}
}
func (c *Controller) Test(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Welcome to the HomePage!")
}
func (c *Controller) RegisterRoutes(r *mux.Router){
r.HandleFunc("/test", c.Test).Methods("GET")
}
DAO classes
type IUserDB interface {
Get
GetByID ...
}
type userDAO struct {
db *sql.DB
}
func NewDB(dataSourceName string) (*userDAO, error) {
db, err := sql.Open("mysql", dataSourceName)
if err != nil {
return nil, err
}
if err = db.Ping(); err != nil {
return nil, err
}
return &userDAO{db}, nil
}
func (dao *userDAO) Get(){
}
func (dao *userDAO) GetByID(){
}
main class
func main() {
db, err := daos.NewDB(connectionStr)
if err != nil {
log.Panic(errr)
}
handler := handlers.NewController(db)
router := mux.NewRouter()
handler.RegisterRoutes(router)
log.Printf("serving on port 8080")
http.ListenAndServe(":3000", router)
}
Question:
We are creating only one instance of Handler and Repository objects. (will make another service interface also)
How golang achieve concurrency with this setup for simultaneous many request ?
For every request the same object of handler or db will be used ?
Help to clarify this design ?