N1QL Not working it throws panic but sdk collection.get working whats wrong?

i am using couchbase Community Edition 6.0.0 build 1693 ‧ IPv4

 query := "SELECT x.* FROM `gps_tracker` x WHERE x.`type`=$1 LIMIT 1;"
rows, err := cluster.Query(query, &gocb.QueryOptions{PositionalParameters: []interface{}{"device"}})

if err != nil {
    panic(err)
}

var vdata interface{}
err = rows.One(&vdata)
if err != nil {
    panic(err)
}
fmt.Println(vdata)

shows following error:
http: panic serving [::1]:17149: runtime error: invalid memory address or nil pointer dereference

But using golang sdk it works

getResult, err := collection.Get(“mostain”, &gocb.GetOptions{})

if err != nil {

    panic(err)

}

//fmt.Println("##", getResult.Result)

var myContent interface{}

if err := getResult.Content(&myContent); err != nil {

    panic(err)

}

fmt.Println("d1:", myContent)

my original document:

There are only one bucket: gps_tracker and contains 2 document only

Did you try the query in Query Work Bench.

Yes…query working fine with workbench

Did you create valid bucket connection https://docs.couchbase.com/go-sdk/2.1/howtos/n1ql-queries-with-sdk.html#getting-started

Note : When using a Couchbase version < 6.5 you must create a valid Bucket connection using cluster.Bucket(name) before you can use N1QL. https://docs.couchbase.com/go-sdk/2.1/hello-world/start-using-sdk.html

Yes i exactly followed that tutorial and wrote following code.
please check my code:

cluster.Bucket(“gps_tracker”)

bucket.DefaultCollection()

query := "SELECT x.* FROM `gps_tracker` x WHERE x.`type`=$1 LIMIT 1;"

rows, err := cluster.Query(query, &gocb.QueryOptions{PositionalParameters: []interface{}{"device"}})

// check query was successful

if err != nil {

    panic(err)

}

var vdata interface{}

err = rows.One(&vdata)

if err != nil {

    panic(err)

}

fmt.Println(vdata)

I am not SDK expert some one might have to help you.

you can add this start and try

cluster, err := gocb.Connect(
		"localhost",
		gocb.ClusterOptions{
			Username: "Administrator",
			Password: "password",
		})
	if err != nil {
		panic(err)
	}

Dear @vsr1 i tried this on my init at the above, still not working, but you tried to help me, i am really grateful for that.

func init() {

cluster, err := gocb.Connect("localhost", gocb.ClusterOptions{

    Username: "mostain",

    Password: "tEst132$",

})

//fmt.Printf("%T", cluster)

if err != nil {

    fmt.Println("Connect:", err.Error())

}

bucket = cluster.Bucket("gps_tracker")

}

cluster, err :=

This creates new variable inside init function not assign package variable

try
var err error
cluster, err = …

1 Like

Yes @vsr1 my friend your trick working now, great job brother. You really solved my problem. I am really grateful to you. :grinning: