Gocql 自定义编组器
Gocql custom marshaller
我有一个 table,其元组列由一个 int64 和一个 uuid 配对组成:
CREATE TABLE ks.mytable {
fileid frozen <tuple <bigint, uuid>>,
hits counter,
...
我目前可以使用如下 cql 语句设置字段:
UPDATE ks.mytable hits = hits + 1 WHERE fileid=(? ?);
我传入了 2 个变量作为参数,一个 int64
和一个 gocql.UUID
。
我不想到处移动 2 个变量,而是想将它们放在一个结构中,例如
type MyID struct {
id int64
uid gocql.UUID
}
然后使用 Marshaller
将这些传递到 UPDATE
语句中。
这可能吗?我不确定是否可以为元组字段传入单个变量。如果是这样,我该怎么做?我无法弄清楚如何 - 我试图模仿 https://github.com/gocql/gocql/blob/master/marshal_test.go#L935 但我遇到错误,无法在结构中设置字段 (cannot refer to unexported field or method proto
)
如您所述,您收到以下错误:
cannot refer to unexported field or method proto
这意味着您需要在结构中导出您的字段,这意味着在 Go 中以大写字母开头。所以你的结构应该是:
type MyID struct {
Id int64
Uid gocql.UUID
}
那么,应该可以了。
我有一个 table,其元组列由一个 int64 和一个 uuid 配对组成:
CREATE TABLE ks.mytable {
fileid frozen <tuple <bigint, uuid>>,
hits counter,
...
我目前可以使用如下 cql 语句设置字段:
UPDATE ks.mytable hits = hits + 1 WHERE fileid=(? ?);
我传入了 2 个变量作为参数,一个 int64
和一个 gocql.UUID
。
我不想到处移动 2 个变量,而是想将它们放在一个结构中,例如
type MyID struct {
id int64
uid gocql.UUID
}
然后使用 Marshaller
将这些传递到 UPDATE
语句中。
这可能吗?我不确定是否可以为元组字段传入单个变量。如果是这样,我该怎么做?我无法弄清楚如何 - 我试图模仿 https://github.com/gocql/gocql/blob/master/marshal_test.go#L935 但我遇到错误,无法在结构中设置字段 (cannot refer to unexported field or method proto
)
如您所述,您收到以下错误:
cannot refer to unexported field or method proto
这意味着您需要在结构中导出您的字段,这意味着在 Go 中以大写字母开头。所以你的结构应该是:
type MyID struct {
Id int64
Uid gocql.UUID
}
那么,应该可以了。