gorm
https://gorm.io/zh_CN/docs/index.html
https://github.com/go-gorm/gorm
踩坑
报错:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 | 2021/08/01 14:37:53 [Recovery] 2021/08/01 - 14:37:53 panic recovered:
runtime error: invalid memory address or nil pointer dereference
/usr/local/go/src/runtime/panic.go:212 (0x435efa)
panicmem: panic(memoryError)
/usr/local/go/src/runtime/signal_unix.go:734 (0x44e8b2)
sigpanic: panicmem()
/home/nocilantro/go/pkg/mod/gorm.io/gorm@v1.21.12/gorm.go:296 (0x5b0506)
(*DB).Debug: Logger: db.Logger.LogMode(logger.Info),
/mnt/f/easyvideo/gin_back_end/routers/routers.go:14 (0xa06438)
allVideos: if result := settings.DB.Debug().Where("id = ?", 1).Find(&video); result.Error != nil {
/home/nocilantro/go/pkg/mod/github.com/gin-gonic/gin@v1.7.2/context.go:165 (0xa04c39)
(*Context).Next: c.handlers[c.index](c)
/home/nocilantro/go/pkg/mod/github.com/gin-gonic/gin@v1.7.2/recovery.go:99 (0xa04c20)
CustomRecoveryWithWriter.func1: c.Next()
/home/nocilantro/go/pkg/mod/github.com/gin-gonic/gin@v1.7.2/context.go:165 (0xa03d13)
(*Context).Next: c.handlers[c.index](c)
/home/nocilantro/go/pkg/mod/github.com/gin-gonic/gin@v1.7.2/logger.go:241 (0xa03cd2)
LoggerWithConfig.func1: c.Next()
/home/nocilantro/go/pkg/mod/github.com/gin-gonic/gin@v1.7.2/context.go:165 (0x9fa1c9)
(*Context).Next: c.handlers[c.index](c)
/home/nocilantro/go/pkg/mod/github.com/gin-gonic/gin@v1.7.2/gin.go:489 (0x9fa1af)
(*Engine).handleHTTPRequest: c.Next()
/home/nocilantro/go/pkg/mod/github.com/gin-gonic/gin@v1.7.2/gin.go:445 (0x9f9c9b)
(*Engine).ServeHTTP: engine.handleHTTPRequest(c)
/usr/local/go/src/net/http/server.go:2867 (0x7a9802)
serverHandler.ServeHTTP: handler.ServeHTTP(rw, req)
/usr/local/go/src/net/http/server.go:1932 (0x7a4c2c)
(*conn).serve: serverHandler{c.server}.ServeHTTP(w, w.req)
/usr/local/go/src/runtime/asm_amd64.s:1371 (0x46dee0)
goexit: BYTE $0x90 // NOP
|
原因:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 | package settings
import (
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
var DB *gorm.DB
func init() {
dsn := "root:123456@tcp(127.0.0.1:3306)/easyvideo?charset=utf8mb4&parseTime=True&loc=Local"
DB, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
fmt.Printf("mysql connect error %v", err)
}
if DB.Error != nil {
fmt.Printf("database error %v", DB.Error)
}
}
|
DB, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
这一行中使用了 :=
,这个表达式定义了新的 DB
,所以 var DB *gorm.DB
中的全局变量 DB 仍然是 nil,无法正常使用
解决方法:
| var err error
DB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
fmt.Printf("mysql connect error %v", err)
}
|