当尝试调用通过调用 neoism.CypherQuery 返回的 Node 对象的方法时,我不断收到“无效内存地址或 nil 指针取消引用” panic 。查询返回一些东西(访问 Node 的 Data 属性有效),但调用任何方法都会导致 panic 。这些方法有接收器 *Node,而不是 Node,但是 AFAIK 应该仍然有效吗?无论如何,我已经尝试获取指向该对象的指针并调用该对象的方法,但这也没有用。我真的被困在这里......
重现问题的示例代码(需要新主义和 go-uuid 包以及在本地主机上运行的 Neo4J 数据库):
package main
import (
"code.google.com/p/go-uuid/uuid"
"fmt"
"github.com/jmcvetta/neoism"
)
func main() {
neo, _ := neoism.Connect("http://localhost:7474/db/data")
// create a node with a random id
nodeId := uuid.New()
_, err := neo.CreateNode(neoism.Props{"NodeId": nodeId})
if err != nil {
fmt.Println(err)
return
}
fmt.Println("node created, id", nodeId)
// find the node by the id
res := []struct {
Node neoism.Node `json:"nodes"`
}{}
err = neo.Cypher(&neoism.CypherQuery{
Statement: `MATCH (nodes {NodeId:{NodeId}}) RETURN nodes`,
Parameters: neoism.Props{"NodeId": nodeId},
Result: &res,
})
if err != nil {
fmt.Println(err)
return
}
fmt.Println("query executed")
// try to work with the query results
if len(res) > 0 {
// get Data -> works
fmt.Println(res[0].Node.Data)
// call method -> panics
err = res[0].Node.SetProperty("TestProp", "TestValue")
if err != nil {
fmt.Println(err)
return
}
}
}
这是堆栈跟踪的相关部分:
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 方法的源代码:https://github.com/jmcvetta/neoism/blob/master/entity.go#L22
它看起来像是来自嵌入式结构,实际上并不是 Node 结构上的方法。嵌入式实体结构不是指针,因此它也不应该为空。
堆栈跟踪显示 panic 发生在第 26 行,因为 e.Db 未初始化:
resp, err := e.Db.Session.Put(url, &value, nil, &ne)
在调用 SetProperty 之前设置 e.Db 解决了这个问题:
res[0].Node.Db = neo
关于Golang/新主义 : calling methods of objects returned by query leads to panic,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27405705/
我没有使用Ruby的经验,所以我的代码感觉“丑陋”而且不符合地道:deflogged_in?!user.nil?end我宁愿有类似的东西deflogged_in?user.not_nil?end但是找不到这样一个对立nil?的方法 最佳答案 您似乎过分关注bool值。deflogged_in?userend如果用户为nil,那么logged_in?将返回一个“假”值。否则,它将返回一个对象。在Ruby中,我们不需要返回true或false,因为我们有像JavaScript中一样的“truthy”和“falsey”值。更新如果您使用的
鉴于iPhone's25klimitforcachingoffiles,我想知道是否有人对将缓存作为顶级目标的iPhone优化的javascript库感兴趣。因为它只是iPhone,所以它可以摆脱大多数跨浏览器的障碍并依赖于safari的特定功能,希望减少一些周长并保持在25k。JohnResigdiscussesthisbriefly,尽管看起来主要是为了驳回它。他确实提到:ifyou'reparticularlyexcitedaboutbreakingjQuerydownintolittlechunksyoucangrabtheindividualpiecesfromSVNandb
我正在为javascript寻找一个极简主义的模板系统,alaJohnResig'sJavascriptMicroTemplating.越小越好,如果它是基于jquery的就更好了。推荐?我尝试了John的微模板,但遇到了一些问题,想看看是否有更多成熟/更好的打包解决方案。[更新]我再次尝试了Resig的微模板,它对我来说效果很好。仍然想听听其他替代方案(如果有的话)。 最佳答案 还有Mustache.js,它有一个简洁的语法IMO。 关于javascript-极简主义的微型Javasc
华为Od必看系列华为OD机试全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理已参加机试人员的实战技巧华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典文章目录华为Od必看系列使用说明本期题目:任务总执行时长题目输入输出示例一输入输出说明go代码实现华为OD其它语言版本
目录Golang获取HTTP请求的IP地址HTTP的发展历史3,HTTP所在的网络层次4,HTTP请求与响应
关闭。这个问题需要debuggingdetails.它目前不接受答案。编辑问题以包含desiredbehavior,aspecificproblemorerror,andtheshortestcodenecessarytoreproducetheproblem.这将有助于其他人回答问题。关闭4年前。Improvethisquestion在golang代码中使用sql查询获取语法错误。golang中此SQL查询所需的正确语法:rows,errQuery:=dbCon.Query("SELECTB.LatestDate,A.SVRNameASServerName,A.DRIVE,A.Tot
给定表达式字符串exp,编写程序检查exp中“{”、“}”、“(”、“)”、“[”、“]的对和顺序是否正确。packagemainimport("fmt"stack"github.com/golang-collections/collections/stack")funcmain(){s:="(a[0]+b[2c[6]])){24+53}"stackO:=stack.New()stackmap:=map[string]string{"[":"]","(":")","{":"}"}varstr=""for_,num:=ranges{str=string(num)if(str=="{"||
关闭。这个问题是notreproducibleorwascausedbytypos.它目前不接受答案。这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topic在这里,这个问题的解决方式不太可能帮助future的读者。关闭3年前。Improvethisquestion如何通过使用此库在golang中传递数字来获取国家代码:https://godoc.org/github.com/nyaruka/phonenumbers?
为什么下面的代码会抛出意外的函数错误?我看到错误./func_correct.go:4:syntaxerror:unexpectedfunc,expectingnamepackagemainfunc(st*Stack)Pop()int{v:=0forix:=len(st)-1;ix>=0;ix--{ifv=st[ix];v!=0{st[ix]=0returnv}}return0}funcmain(){Pop()} 最佳答案 定义堆栈类型在main中为其创建一个变量对其调用Pop代码:packagemainimport"fmt"typ
Thisquestionalreadyhasanswershere:ForloopoftwovariablesinGo(3个答案)2年前关闭。我正在通过Gotour在Go中使用for循环我跑的时候packagemainimport"fmt"funcmain(){sum:=1forsum程序运行正常,输出为1024但是当我更改sum:=0时packagemainimport"fmt"funcmain(){sum:=0forsum它给出了错误的说法processtooktoolongProgramexited.编辑:我沉迷于Go巡回赛,以至于我无法意识到,我犯了一个逻辑错误:P。