在另一个函数中使用SQL连接

How init mysql connection in main function and place it another function? Or init connection in another place and use it anywhere?

Something like this below(this example wrong!)

package main

import (
    "fmt"
    "net/http"

    _ "github.com/go-sql-driver/mysql"
    "database/sql"
)

func indexHandler(w http.ResponseWriter, r *http.Request) {
      stmt, err := db.Prepare("INSERT userinfo SET username=?,departname=?,created=?")
      res, err := stmt.Exec("test", "test", "test")
}

func main() {
    db, err := sql.Open("mysql", "connection")
    if err != nil {
        panic(err)
    }
    http.HandleFunc("/", indexHandler)
    http.ListenAndServe(":3000", nil)
}

Thanks anyway!

Make it global:

var db *sql.DB

func indexHandler(w http.ResponseWriter, r *http.Request) {
    stmt, err := db.Prepare(...
    ...
}

func main() {
    var err error
    db, err = sql.Open("mysql", "connection")
    ...

or create handler as closure:

func createIndexHandler(db *sql.DB) (func (http.ResponseWriter, *http.Request)) {
    return func(w http.ResponseWriter, r *http.Request) {
        stmt, err := db.Prepare(...
        ...
    }
}

func main() {
    db, err := sql.Open("mysql", "connection")
    ...
    http.HandleFunc("/", createIndexHandler(db))