Я использую библиотеку github.com/go-sql-driver/mysql
для взаимодействия с моей базой данных MySQL. Все работает нормально, за исключением случаев, когда у меня запрос больше 20 записей. Запрос возвращает набор результатов в порядке, но когда цикл проходит через него, он паникует, когда добираюсь до 21-й записи.
Я запрашиваю свою базу данных следующим образом:
row, err = store.db.Query(myquerystring)
Я извлекаю возвращенные значениянапример:
indx = 0
for row.Next() {
err = row.Scan(
&mySlice[indx].Val1, &mySlice[indx].Val2
)
if err != nil {
if err == sql.ErrNoRows {
log.Print("No records found")
} else {
log.Printf("Error retrieving data: %s", err.Error())
}
}
indx++
}
Ошибка, которую я получаю, не связана с обработкой ошибок, она возникает сразу после получения 21-й записи. Я ставлю вход в систему в качестве первой и последней вещи в цикле for, и я получаю журнал для конца 20-й записи, но не первый журнал для 21-й записи, поэтому кажется, что строка for row.Next()
вызывает панику.
Я получаю сообщение об ошибке:
http: panic serving xxx.xxx.xxx.xxx:xxxxx: runtime error: invalid memory address or nil pointer dereference
Вот как я инициализирую свой фрагмент:
** sqlstring - тот же запрос, что и выше, за исключением удаления всех полейиз выбора и только count(tableid)
возвращается.
row, err := store.db.Query(sqlString)
row.Next()
err = row.Scan(
&count,
)
var mySlice = make([]mystruct, count)
Трассировка стека:
web_1 | 2019/11/21 03:03:23 4) record number: 19
web_1 | 2019/11/21 03:03:23 http: panic serving xxx.xxx.xxx.xxx:xxxxx: runtime error: invalid memory address or nil pointer dereference
web_1 | goroutine 811 [running]:
web_1 | net/http.(*conn).serve.func1(0xc42047eaa0)
web_1 | /usr/local/go/src/net/http/server.go:1721 +0xd0
web_1 | panic(0x7f8bc0, 0xa5c3a0)
web_1 | /usr/local/go/src/runtime/panic.go:489 +0x2cf
web_1 | database/sql.(*Rows).Next(0x0, 0x87afa9)
web_1 | /usr/local/go/src/database/sql/sql.go:2133 +0x30
web_1 | main.(*dbStore).GetVehicleCount(0xc420076230, 0x8865a0)
web_1 | /go/src/app/store.go:1385 +0xa7
web_1 | main.(*dbStore).GetVehicles(0xc420076230, 0x0, 0x0, 0x0)
web_1 | /go/src/app/store.go:1415 +0xed
web_1 | main.(*dbStore).SearchTrips(0xc420076230, 0xed5540400, 0x0, 0x0, 0x0, 0x0, 0x0)
web_1 | /go/src/app/store.go:1220 +0x123
web_1 | main.CalendarReportHandler(0xa373e0, 0xc4200e3420, 0xc4200ce500)
web_1 | /go/src/app/handlers.go:1559 +0x475
web_1 | net/http.HandlerFunc.ServeHTTP(0x886ca0, 0xa373e0, 0xc4200e3420, 0xc4200ce500)
web_1 | /usr/local/go/src/net/http/server.go:1942 +0x44
web_1 | app/vendor/github.com/gorilla/mux.(*Router).ServeHTTP(0xc4200d4180, 0xa373e0, 0xc4200e3420, 0xc4200ce500)
web_1 | /go/src/app/vendor/github.com/gorilla/mux/mux.go:212 +0xdf
web_1 | net/http.serverHandler.ServeHTTP(0xc42009bd90, 0xa373e0, 0xc4200e3420, 0xc4200ce300)
web_1 | /usr/local/go/src/net/http/server.go:2568 +0x92
web_1 | net/http.(*conn).serve(0xc42047eaa0, 0xa37ae0, 0xc4203a9600)
web_1 | /usr/local/go/src/net/http/server.go:1825 +0x612
web_1 | created by net/http.(*Server).Serve
web_1 | /usr/local/go/src/net/http/server.go:2668 +0x2ce
web_1 | 2019/11/21 03:03:23 Error retrieving drivers: Error 1040: Too many connections
web_1 | 2019/11/21 03:03:23 http: panic serving 172.26.0.1:58770: runtime error: invalid memory address or nil pointer dereference
web_1 | goroutine 955 [running]:
web_1 | net/http.(*conn).serve.func1(0xc4204e9040)
web_1 | /usr/local/go/src/net/http/server.go:1721 +0xd0
web_1 | panic(0x7f8bc0, 0xa5c3a0)
web_1 | /usr/local/go/src/runtime/panic.go:489 +0x2cf
web_1 | database/sql.(*Rows).Next(0x0, 0x87afa9)
web_1 | /usr/local/go/src/database/sql/sql.go:2133 +0x30
web_1 | main.(*dbStore).GetVehicleCount(0xc420076230, 0x0)
web_1 | /go/src/app/store.go:1385 +0xa7
web_1 | main.(*dbStore).SearchTrips(0xc420076230, 0xed54d6c80, 0x0, 0x0, 0x0, 0x0, 0x0)
web_1 | /go/src/app/store.go:1219 +0xf3
web_1 | main.CalendarReportHandler(0xa373e0, 0xc4200e3960, 0xc4200ce700)
web_1 | /go/src/app/handlers.go:1559 +0x475
web_1 | net/http.HandlerFunc.ServeHTTP(0x886ca0, 0xa373e0, 0xc4200e3960, 0xc4200ce700)
web_1 | /usr/local/go/src/net/http/server.go:1942 +0x44
web_1 | app/vendor/github.com/gorilla/mux.(*Router).ServeHTTP(0xc4200d4180, 0xa373e0, 0xc4200e3960, 0xc4200ce700)
web_1 | /go/src/app/vendor/github.com/gorilla/mux/mux.go:212 +0xdf
web_1 | net/http.serverHandler.ServeHTTP(0xc42009bd90, 0xa373e0, 0xc4200e3960, 0xc420144000)
web_1 | /usr/local/go/src/net/http/server.go:2568 +0x92
web_1 | net/http.(*conn).serve(0xc4204e9040, 0xa37ae0, 0xc4204e1940)
web_1 | /usr/local/go/src/net/http/server.go:1825 +0x612
web_1 | created by net/http.(*Server).Serve
web_1 | /usr/local/go/src/net/http/server.go:2668 +0x2ce