对指针和值形参的新概念感到困惑



我正在用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错误类型的切片时遇到了相同的行为。第一次没有错误是相当令人沮丧的,但它很快成为一种反射。

相关内容

  • 没有找到相关文章

最新更新