【发布时间】:2018-04-24 00:59:59
【问题描述】:
我正在用 golang 编写其余的 api,结构如下
处理程序类:
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 类
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(){
}
主类
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)
}
问题:
我们只创建 Handler 和 Repository 的一个实例 对象。 (也会制作另一个服务接口)
golang 如何通过此设置实现并发多个请求?
对于每个请求,将使用相同的 handler 或 db 对象?
帮助澄清这个设计?
【问题讨论】:
标签: go concurrency gorilla