当我尝试使用 db.QueryRow 时出现 golang 运行时错误

我有 controller.go:


package controller

import (

    "github.com/fishkaoff/todoList/pkg/postgresql"

    "github.com/gin-gonic/gin"

    "net/http"

    "context"

)


type Task struct {

    Title string 

    Description string

 }



func GetTasks(c *gin.Context) {

    var response *Task

    err := db.Conn.QueryRow(context.Background(), "select * from tasks").Scan(&response.Title, 

    &response.Description)

    if err != nil {

        c.JSON(http.StatusInternalServerError, gin.H{"error":"error"})

    }


    c.JSON(200, gin.H{

        "page":"gettasks",

        "tasks": response,

    })

}

当我发送请求时它返回我


```runtime error: invalid memory address or nil pointer dereference

C:/Program Files/Go/src/runtime/panic.go:260 (0xb7bab5)

        panicmem: panic(memoryError)

C:/Program Files/Go/src/runtime/signal_windows.go:255 (0xb7ba85)

        sigpanic: panicmem()

D:/workspace/golangWWW/pkg/mod/github.com/jackc/pgx/v4@v4.17.2/conn.go:551 (0x1015db1)

        (*Conn).Query: simpleProtocol := c.config.PreferSimpleProtocol

D:/workspace/golangWWW/pkg/mod/github.com/jackc/pgx/v4@v4.17.2/conn.go:663 (0x101b9dc)

        (*Conn).QueryRow: rows, _ := c.Query(ctx, sql, args...)

D:/workspace/golangWWW/todolist/internal/controller/controller.go:17 (0x101b9ab)

        GetTasks: err := db.Conn.QueryRow(context.Background(), "select * from tasks").Scan(&response.Title, &response.Description)

D:/workspace/golangWWW/pkg/mod/github.com/gin-gonic/gin@v1.8.1/context.go:173 (0xeb99c1)

        (*Context).Next: c.handlers[c.index](c)

D:/workspace/golangWWW/pkg/mod/github.com/gin-gonic/gin@v1.8.1/recovery.go:101 (0xeb99ac)

        CustomRecoveryWithWriter.func1: c.Next()


Cats萌萌
浏览 173回答 1
1回答

慕姐8265434

    var response *Task您已分配内存来存储 a *Task,而不是 a Task。那么当你    .Scan(&response.Title,     &response.Description)尝试获取response.Title和的地址response.Description。这些字段没有地址,因为它response是一个指针但未指向有效任务。尝试:var response Task现在您实际上已经为Title和Description字段分配了空间,因此有地方可以存储这些值。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go