我正在用Go编写一个web应用程序,并使用Neo4j数据库存储数据。作为Neo4j api的Go,我选择neoism。
但是,看看下面的代码片段:
db, _ := neoism.Connect("http://localhost:7474/db/data")
// Create a node with a Cypher quer
// Issue a query
//
res1 := []struct {
A string `json:"n.email"`
}{}
cq1 := neoism.CypherQuery{
//Use backticks for long statements - Cypher is whitespace indifferent
Statement: `
MATCH (n:Account {email: {email}})
RETURN n.email
`,
Parameters: neoism.Props{"email": "hans@ueli.com"},
Result: &res1,
}
db.Cypher(&cq1)
fmt.Println(res1)
我从节点帐户查询这里的数据,并得到了一个结果返回,这里一切都很好。第二段代码几乎相同,但我在这里直接创建了一个指针切片(变量res2)。
// Validate, if email already available in db
res2 := []*struct {
A string `json:"n.email"`
}{}
cq := &neoism.CypherQuery{
Statement: `
MATCH (n:Account {email: {email}})
RETURN n.email
`,
Parameters: neoism.Props{"email": "hans@ueli.com"},
Result: res2,
}
db.Cypher(cq)
fmt.Println(res2)
它们之间的区别是,我得到了第一个样本的结果,但第二个没有。
结果:
[{hans@ueli.com}]
[]
这里指针res2有什么问题?
来自neoism文档:
Result必须是指向结构体切片的指针——例如&[]someStruct{}
没有提到结构指针的切片,所以我假设你的切片是空的,因为函数不需要指针,所以它不能在切片中放入任何东西。
我在给sqlx.Query
错误类型的切片时遇到了相同的行为。第一次没有错误是相当令人沮丧的,但它很快成为一种反射。