package main import ( "database/sql" "database/sql/driver" "net/http" "runtime" "time" ) type drv struct{} type stmt struct{} type conn struct{} type rows struct{} func init() { sql.Register("postgres", &drv{}) } func (d *drv) Open(string) (driver.Conn, error) { return &conn{}, nil } func (cn *conn) Prepare(string) (driver.Stmt, error) { return &stmt{}, nil } func (st *stmt) Query([]driver.Value) (driver.Rows, error) { return &rows{}, nil } func (st *stmt) NumInput() int { return 0 } func (cn *conn) Close() error { return nil } func (st *stmt) Close() error { return nil } func (rs *rows) Close() error { return nil } func (cn *conn) Begin() (driver.Tx, error) { panic("begin driver") } func (st *stmt) Exec([]driver.Value) (driver.Result, error) { panic("Exec driver") } func (cn *conn) Query(string, []driver.Value) (driver.Rows, error) { panic("Query string") } func (cn *conn) Exec(string, []driver.Value) (driver.Result, error) { panic("Exec string") } func (rs *rows) Next([]driver.Value) error { panic("Next row") } func (rs *rows) Columns() []string { panic("columns rows") } // ACTUAL LISTENER STARTS BELOW var ( mystmt *sql.Stmt ) func main() { runtime.GOMAXPROCS(1) db, err := sql.Open("postgres", "") if err != nil { panic("open_err") } db.SetMaxIdleConns(1) mystmt, err = db.Prepare("select 5 from pg_class limit 1") if err != nil { panic("prep_err") } println("starting") for i := 0; i < 10; i++ { go reqreq() } http.HandleFunc("/golang/abcdefg", abc) if err := http.ListenAndServe(":9000", nil); err != nil { panic("listen_err") } } func reqreq() { time.Sleep(1 * time.Second) for { resp, err := http.Get("http://localhost:9000/golang/abcdefg") if err != nil { panic("get_err") } resp.Body.Close() } } func abc(http.ResponseWriter, *http.Request) { _ = mystmt.QueryRow() }