首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xorm示例不起作用:“运行时错误:无效内存地址或nil指针取消引用”

xorm示例不起作用:“运行时错误:无效内存地址或nil指针取消引用”
EN

Stack Overflow用户
提问于 2019-05-31 21:50:18
回答 1查看 296关注 0票数 0

基于this的例子,我试着写了一个从数据库返回一些数据的程序。不幸的是,根据运行时控制台的输出,(或多或少)相同的程序结构会导致内存错误( err := orm.Find(&sensorDataEntry) )。

这里我漏掉了什么?example和我的程序都使用make()创建了切片,并在Find()方法中使用了引用。

有问题的代码:

代码语言:javascript
复制
package main

import (
    "fmt"
    "net/http"
    "time"

    "github.com/gorilla/mux"
    _ "github.com/lib/pq"
    //"database/sql"
    "github.com/go-xorm/xorm"

)

var orm *xorm.Engine

func newRouter() *mux.Router {
    r := mux.NewRouter()
    r.HandleFunc("/sensorentries", GetSensorEntriesHandler).Methods("GET")

    return r
}

type SensorDataEntry struct {
    id int `xorm:"int"`
    sensor_id string `xorm:"varchar(32)"`
    key string `xorm:"varchar(128)"`
    value float64 `xorm:"numeric(20,2)"`
    created_at time.Time `xorm:"timestamp"`
}

func main() {
    connString := "host=server.lan user=x password=x dbname=testdb sslmode=disable"
    orm, err := xorm.NewEngine("postgres", connString)
    //orm.ShowSQL(true)

    if err != nil {
        println(err)
        return
    }

    if err = orm.Sync2(SensorDataEntry{}); err != nil {
        return
    }

    r := newRouter()
    http.ListenAndServe(":8080", r)
}

func GetSensorEntriesHandler(resp http.ResponseWriter, req *http.Request) {
    sensorDataEntry := make([]SensorDataEntry, 0)
    err := orm.Find(&sensorDataEntry)

    if err != nil {
        println(err)
    }

    fmt.Println(sensorDataEntry)

    fmt.Fprintf(resp, "return text")
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-31 22:51:49

正如mkopriva所指出的,问题是在赋值时使用相同的变量名。

问题的解决方案是:

而不是

代码语言:javascript
复制
orm, err := xorm.NewEngine("postgres", connString)

使用

代码语言:javascript
复制
var err error
orm, err = xorm.NewEngine("postgres", connString)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56396386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档