2 votes

Comment passer le type dans un gestionnaire http ?

J'essaie de séparer mon code http go en "contrôleurs" en créant un nouveau paquet pour eux, mais je n'arrive pas à trouver comment passer un type de db dans le gestionnaire. Je veux pouvoir passer le type de base de données que je crée dans main.go dans mon gestionnaire d'index dans index.go. Si ce n'est pas la bonne façon de résoudre le problème, faites-moi part d'une meilleure solution (j'apprends au fur et à mesure et j'aimerais garder les choses simples pour l'instant). Mon code jusqu'à présent :

main.go :

package main

import (

    "database/sql"
    "fmt"
    _ "github.com/go-sql-driver/mysql"
    "github.com/gorilla/mux"
    "log"
    "mvc3/app/c"
    "net/http"
)

var Db *sql.DB

func main() {

    fmt.Println("Starting up!")

    var err error
    Db, err = sql.Open("mysql", "root@/dev?charset=utf8")
    if err != nil {
        log.Fatalf("Error on initializing database connection: %s", err.Error())
    }

    Db.SetMaxIdleConns(100)

    err = Db.Ping()
    if err != nil {
        log.Fatalf("Error on opening database connection: %s", err.Error())
     }

     r := mux.NewRouter()
     r.HandleFunc("/", c.Index)

    http.Handle("/", r)
    http.ListenAndServe(":8080", nil)
}

/app/c/index.go :

package c

import (
    "fmt"
    "net/http"
)

func Index(w http.ResponseWriter, r *http.Request) {

    fmt.Fprintf(w, "Hello world!")

}

Merci !

11voto

Jeremy Wall Points 10643

Utiliser une fermeture.

en app/c changement d'index à :

func Index(db *sql.DB) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        // do stuff with db here
        fmt.Fprintf(w, "Hello world!")
    }
}

puis dans votre fonction principale, utilisez-la comme suit : r.HandleFunc("/", c.Index(db))

La fonction Index renvoie une fonction anonyme qui correspond au type HandleFunc et qui ferme également la valeur de la db qui a été passée en donnant à votre gestionnaire l'accès à cette variable.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X