Closed
Description
Trying to ApacheBench test a basic page created with Go, and I get this error:
2013/03/05 23:27:03 http: panic serving ipaddress:58369: runtime error: slice bounds out of range
/usr/local/go/src/pkg/net/http/server.go:589 (0x43eb1b)
_func_004: buf.Write(debug.Stack())
/usr/local/go/src/pkg/runtime/proc.c:1443 (0x410aab)
panic: reflect·call(d->fn, d->args, d->siz);
/usr/local/go/src/pkg/runtime/runtime.c:128 (0x411577)
panicstring: runtime·panic(err);
/usr/local/go/src/pkg/runtime/runtime.c:91 (0x411448)
panicslice: runtime·panicstring("slice bounds out of range");
/usr/local/go/src/pkg/github.com/Go-SQL-Driver/MySQL/packets.go:133 (0x44b2a6)
com/Go-SQL-Driver/MySQL.(*mysqlConn).readInitPacket: mc.cipher = append(mc.cipher, data[pos:pos+12]...)
/usr/local/go/src/pkg/github.com/Go-SQL-Driver/MySQL/driver.go:46 (0x44a38a)
com/Go-SQL-Driver/MySQL.(*mysqlDriver).Open: err = mc.readInitPacket()
/usr/local/go/src/pkg/database/sql/sql.go:248 (0x4435bd)
(*DB).conn: return db.driver.Open(db.dsn)
/usr/local/go/src/pkg/database/sql/sql.go:310 (0x443b10)
(*DB).prepare: ci, err := db.conn()
/usr/local/go/src/pkg/database/sql/sql.go:295 (0x443a33)
(*DB).Prepare: stmt, err = db.prepare(query)
/usr/local/go/src/pkg/database/sql/sql.go:380 (0x444493)
(*DB).Query: stmt, err := db.Prepare(query)
/myfolder/test.go:13 (0x400cd0)
wwwHandler: result, e := db.Query("SELECT * FROM s WHERE sid=?",sid)
/myfolder/test.go:35 (0x401406)
_func_001: wwwHandler(w, r, db)
/usr/local/go/src/pkg/net/http/server.go:703 (0x432964)
HandlerFunc.ServeHTTP: f(w, r)
/usr/local/go/src/pkg/net/http/server.go:941 (0x4337b8)
(*ServeMux).ServeHTTP: mux.handler(r).ServeHTTP(w, r)
/usr/local/go/src/pkg/net/http/server.go:669 (0x432777)
(*conn).serve: handler.ServeHTTP(w, w.req)
/usr/local/go/src/pkg/runtime/proc.c:271 (0x40ebb1)
goexit: runtime·goexit(void)
Here's my code:
package main
import (
"fmt"
"net/http"
"database/sql"
_ "github.com/Go-SQL-Driver/MySQL"
)
func wwwHandler(w http.ResponseWriter, r *http.Request, db *sql.DB) {
for i := 0; i < 10; i++ {
sid := 1
result, e := db.Query("SELECT * FROM s WHERE sid=?",sid)
if e != nil {
panic(e.Error())
}
result.Next()
var resultsid, created, posted, title, above_the_fold, below_the_fold sql.NullString
var draft_or_final bool
err := result.Scan(&resultsid,&created,&posted,&title,&above_the_fold,&below_the_fold,&draft_or_final)
if err != nil {
panic(err.Error())
}
fmt.Fprintf(w, "%s%s%s%s%s",resultsid.String,created.String,title.String,above_the_fold.String,below_the_fold.String)
}
}
func main() {
db, e := sql.Open("mysql", "username:password@/dbname")
if e != nil {
panic(e.Error())
}
defer db.Close()
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
wwwHandler(w, r, db)
})
http.ListenAndServe(":80",nil)
}