Charles L.
Charles L.

Reputation: 6295

Gocql custom marshaller

I have a table with a tuple column that is made up of an int64 paired with a uuid:

CREATE TABLE ks.mytable {
    fileid    frozen <tuple <bigint, uuid>>,
    hits      counter,
    ...

and I can currently set the field using a cql statement like:

UPDATE ks.mytable hits = hits + 1 WHERE fileid=(? ?);

and I pass in 2 variables as arguments, an int64 and a gocql.UUID.

Instead of moving 2 variables around everywhere, I want to put these in a struct, something like

type MyID struct {
    id  int64
    uid  gocql.UUID
}

then use a Marshaller to pass these into the UPDATE statement.

Is this possible? I am not sure if I can pass in a single variable for the tuple field. If so, how can I do this? I can't figure out how - I was trying to mimic https://github.com/gocql/gocql/blob/master/marshal_test.go#L935 but I'm getting errors where I can't set the fields in the struct (cannot refer to unexported field or method proto)

Upvotes: 1

Views: 880

Answers (1)

Bertan Gundogdu
Bertan Gundogdu

Reputation: 352

As you mentioned, you are getting the following error:

cannot refer to unexported field or method proto

This means you need to export your fields inside the struct and that means beginning with a capital letter in Go. So your struct should be:

type MyID struct {
    Id  int64
    Uid  gocql.UUID
}

Then, it should work.

Upvotes: 1

Related Questions