我的数据层使用了相当数量的Mongo聚合,平均而言,查询需要500-650毫秒才能返回.我在用mgo.
下面显示了一个示例查询函数,它表示我的大多数查询的外观.
func (r userRepo) GetUserByID(id string) (User, error) {
info, err := db.Info()
if err != nil {
log.Fatal(err)
}
session, err := mgo.Dial(info.ConnectionString())
if err != nil {
log.Fatal(err)
}
defer session.Close()
var user User
c := session.DB(info.Db()).C("users")
o1 := bson.M{"$match": bson.M{"_id": id}}
o2 := bson.M{"$project": bson.M{
"first": "$first",
"last": "$last",
"email": "$email",
"fb_id": "$fb_id",
"groups": "$groups",
"fulfillments": "$fulfillments",
"denied_requests": "$denied_requests",
"invites": "$invites",
"requests": bson.M{
"$filter": bson.M{
"input": "$requests",
"as": "item",
"cond": bson.M{
"$eq": []interface{}{"$$item.active", true}, …Run Code Online (Sandbox Code Playgroud) package main
import (
"encoding/json"
"gorilla/mux"
"log"
"net/http"
"database/sql"
_ "go-sql-driver/mysql"
)
func GetPeople(w http.ResponseWriter, r *http.Request, db *sql.DB) {
json.NewEncoder(w).Encode(db.QueryRow("SELECT * from test.animal"))
}
func main() {
db, err := sql.Open("mysql", "root:mariadb@tcp(127.0.0.1:3306)/test")
if err != nil {
panic(err.Error())
}
defer db.Close()
router := mux.NewRouter()
router.HandleFunc("/people", GetPeople).Methods("GET")
log.Fatal(http.ListenAndServe(":8000", router))
}
Run Code Online (Sandbox Code Playgroud)
我需要在 GetPeople 函数中识别我的 db,但是给函数一个第三个参数 (db *sql.DB) 是不可能的。
我该如何解决?谢谢