Sono un go noob e non riesco a trovare alcun esempio completo di apertura di una connessione mysql in Go e quindi la condivisione tra gestori HTTP. Ecco il mio codice fino ad ora, come potrei usare la connessione db che ho aperto in main() nel mio HomeHandler?Come condividere la connessione mysql tra le goroutine http?
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
"github.com/gorilla/mux"
"log"
"net/http"
)
func main() {
fmt.Println("starting up")
db, err := sql.Open("mysql", "root:@/mydb?charset=utf8")
if err != nil {
log.Fatalf("Error opening database: %v", err)
}
db.SetMaxIdleConns(100)
r := mux.NewRouter()
r.HandleFunc("/", HomeHandler)
http.Handle("/", r)
http.ListenAndServe(":8080", nil)
}
func HomeHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "home")
}
Hi Julien, grazie per la risposta. Non potevamo aspettarci una fonte migliore dell'autore del driver Go-MySQL! Sembra che ci potrebbe essere un errore di battitura nel codice quando ottengo un errore di compilazione: './main.go:18: impossibile assegnare * sql.DB a db (tipo sql.DB) in più assegnazioni' – Jason
Scusa, ho risolto il problema digita ora @ fmt.Println.MKO che questo non funziona non è ancora vero. Il database/sql è progettato esattamente per casi d'uso simultanei come questo. –
FYI, ecco alcuni esempi più semplici su come accedere a un DB nei gestori HTTP: https://github.com/TechEmpower/FrameworkBenchmarks/blob/master/go/src/hello/hello.go –