登录
首页 >  Golang >  Go问答

pq QueryRow 扫描失败,因为遇到了无效的内存地址或 nil 指针

来源:stackoverflow

时间:2024-03-04 09:03:28 317浏览 收藏

小伙伴们对Golang编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《pq QueryRow 扫描失败,因为遇到了无效的内存地址或 nil 指针》,就很适合你,本篇文章讲解的知识点主要包括。在之后的文章中也会多多分享相关知识点,希望对大家的知识积累有所帮助!

问题内容

我有以下函数,应该从我的想法表中检索一行:

func (s *ideaservice) getidea(id int64) (*ideaservice.idea, error) {
    stmt, err := s.db.prepare("select id, name, description, created_on, last_updated from ideas where id = $1")
    if err != nil {
        return nil, err
    }
    defer stmt.close()
    var idea *ideaservice.idea
    err = stmt.queryrow(id).scan(&idea.id, &idea.name, &idea.description, &idea.createdon, &idea.lastupdated)
    return idea, err
}

当我在测试中运行此程序时,出现以下错误:

--- FAIL: TestGetIdea (0.00s)
panic: runtime error: invalid memory address or nil pointer dereference [recovered]
    panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x65be98]

我似乎无法弄清楚问题所在。我相信我已经将 idea var 正确实例化为指针,然后在 scan 方法中为其赋值。有人有什么建议吗?


解决方案


func (s *ideaservice) getidea(id int64) (*ideaservice.idea, error) {
    stmt, err := s.db.prepare("select id, name, description, created_on, last_updated from ideas where id = $1")
    if err != nil {
        return nil, err
    }
    defer stmt.close()
    var idea *ideaservice.idea
    err = stmt.queryrow(id).scan(&idea.id, &idea.name, &idea.description, &idea.createdon, &idea.lastupdated)
    return idea, err
}

您能否将 $1 替换为 并看看它是否有效?在 stmt.queryrow 中,您传递的是 id。像这样:

stmt, err := s.db.prepare("select id, name, description, created_on, last_updated from ideas where id = ?")

如果不起作用,请添加此块:

switch {
    case err == sql.ErrNoRows:
        log.Fatalf("no user with id %d", id)
    case err != nil:
        log.Fatal(err)
    default:
        log.Println("ok!")
    }

更新:没有看到对该问题的评论。是的,他也是对的。也请修复它们。

并检查 err 被困的位置(在这种情况下)。

好了,本文到此结束,带大家了解了《pq QueryRow 扫描失败,因为遇到了无效的内存地址或 nil 指针》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>