34
저는 Go 멍청한 놈이어서 Go에서 MySQL 연결을 열고 HTTP 처리기에서 공유하는 완전한 예제를 찾을 수 없습니다. 지금까지 내 코드가있다. 내 HomeHandler에서 main()에서 연 DB 연결을 사용하는 방법은 무엇입니까?http goroutines간에 mysql 연결을 공유하는 방법은 무엇입니까?
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")
}
안녕 줄리앙, 덕분에 응답을 위해 :
방금 DB-핸들을 공유하고 HTTP 핸들러에서 사용할 필요가, 코드 이것이 의미에 적용. Go-MySQL-Driver의 저자보다 더 나은 소스를 기대할 수 없었습니다! './main.go:18 : 다중 할당에서 sql.DB를 db (유형 sql.DB)에 할당 할 수 없습니다 .' – Jason죄송합니다. 수정했습니다. 오류가 발생했습니다. 지금 입력하십시오. @ fmt.Println.MKO가 작동하지 않는 것은 여전히 사실입니다. 데이터베이스/sql은 이와 같은 동시 사용 사례를 위해 정확하게 설계되었습니다. –
FYI, HTTP 처리기에서 DB에 액세스하는 방법에 대한 간단한 예제가 있습니다. https://github.com/TechEmpower/FrameworkBenchmarks/blob/master/go/src/hello/hello.go –