对指针和值参数新主义感到困惑

时间:2014-08-08 10:08:23

标签: go neo4j

我正在Go中编写Web应用程序并使用Neo4j数据库来存储数据。作为Go的Neo4j api,我选择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)

我在这里查询来自节点Account的数据并获得结果返回,一切正常。 第二个代码几乎相同,但我在这里直接创建(变量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在这里有什么问题?

1 个答案:

答案 0 :(得分:2)

来自新社论文件:

  

结果必须是指向一片结构的指针 - 例如&安培; [] someStruct {}

没有关于结构指针切片的说法,所以我假设你的切片是空的,因为函数不期望指针,所以它不能在切片中放任何东西。

当给sqlx.Query错误的切片类型时,我遇到了相同的行为。第一次缺乏错误是非常令人沮丧的,但很快就会变成反射。