我遇到了一些奇怪的行为。我正在尝试设置一个小型 web 应用程序,该应用程序使用在 Ubuntu 12.04 服务器上运行的 Aerospike 3.5 社区获取一些数据。我正在使用默认的 aerospike.conf 文件(使用 'test' 命名空间),并按照如何在此处查询的示例进行操作。
当我尝试使用过滤器查询一些记录时,错误通道随机返回一个 nil 错误。(这个例子指向我的开发数据库实例)。
要多次复制、编译和运行以下命令,您将看到返回的数据或恐慌:
package main
import (
"fmt"
"github.com/aerospike/aerospike-client-go"
)
func main() {
c, err := aerospike.NewClient("52.7.157.46", 3000)
if err != nil {
panic(err)
}
recs := liststuff(c)
fmt.Printf("got results: %v", recs)
}
func liststuff(client *aerospike.Client) []*aerospike.Record {
// fetch some records with a filter
stm := aerospike.NewStatement("test", "products")
stm.Addfilter(aerospike.NewEqualFilter("visible", 1))
fmt.Println("querying...")
recordset, err := client.Query(nil, stm)
if err != nil {
panic(err)
}
// collect results into a slice
recs := []*aerospike.Record{}
L:
for {
select {
case rec, chanOpen := <-recordset.Records:
if !chanOpen {
break L
}
fmt.Println("found record %v", rec)
recs = append(recs, rec)
case err := <-recordset.Errors:
if err != nil {
panic(err)
} else {
panic(fmt.Errorf("error nil when it should exist"))
}
return nil
}
}
return recs
}