Skip to content

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,无法正常使用

解决方法:

1
2
3
4
5
6
var err error
DB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})

if err != nil {
    fmt.Printf("mysql connect error %v", err)
}