Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Golang/neoism:调用查询返回的对象的方法会导致恐慌_Go_Neo4j - Fatal编程技术网

Golang/neoism:调用查询返回的对象的方法会导致恐慌

Golang/neoism:调用查询返回的对象的方法会导致恐慌,go,neo4j,Go,Neo4j,当试图调用调用neoism.CypherQuery返回的节点对象的方法时,我总是遇到“无效内存地址或零指针取消引用”的恐慌。查询返回一些东西(访问节点的数据属性有效),但调用任何方法都会导致恐慌。这些方法有接收器*节点,而不是节点,但有一个可以工作的AIK?无论如何,我已经尝试获取一个指向该对象的指针并调用该对象上的方法,但这也不起作用。我真的被困在这里了 重现问题的示例代码(需要neoism和go uuid包以及在本地主机上运行的Neo4J DB): 以下是堆栈跟踪的相关部分: gorouti

当试图调用调用neoism.CypherQuery返回的节点对象的方法时,我总是遇到“无效内存地址或零指针取消引用”的恐慌。查询返回一些东西(访问
节点的
数据
属性
有效),但调用任何方法都会导致恐慌。这些方法有接收器
*节点
,而不是
节点
,但有一个可以工作的AIK?无论如何,我已经尝试获取一个指向该对象的指针并调用该对象上的方法,但这也不起作用。我真的被困在这里了

重现问题的示例代码(需要neoism和go uuid包以及在本地主机上运行的Neo4J DB):

以下是堆栈跟踪的相关部分:

goroutine 1 [running]:
github.com/jmcvetta/neoism.(*entity).SetProperty(0x119abc00, 0x5d3a68, 0x8, 0x5d3a88, 0x9, ...)
        .../src/github.com/jmcvetta/neoism/entity.go:26 +0x104
main.main()
        .../src/nieware/neoprob/neoprob.go:41 +0x4cb

查看SetProperty方法的源代码:

它看起来像是来自嵌入式结构,实际上不是节点结构上的方法。嵌入式实体结构不是指针,因此也不应为null

堆栈跟踪显示死机发生在第26行,因为
e.Db
未初始化:

resp, err := e.Db.Session.Put(url, &value, nil, &ne)
在调用SetProperty之前设置
e.Db
,可以解决以下问题:

res[0].Node.Db = neo

发布一个堆栈跟踪的示例会有所帮助。感谢您为我指出堆栈跟踪的正确方向!我猜我下意识地认为我做错了什么,这就是为什么我没有在Neosism代码中寻找问题。事实证明,在entity.go(
e.Db.Session.Put(url,&value,nil,&ne)
)的第26行确实抛出了恐慌,因为entity节点的Db属性没有初始化。如果我在调用
SetProperty
res[0].Node.Db=neo
)之前设置了Db属性,它会工作。但是对于库来说,必须有更好的方法来处理这个问题?在我看来,这的确是一个糟糕的API设计选择。
res[0].Node.Db = neo