2016-05-12 3 views
1

私はUUIDとペアint64モードで構成されたタプル列を持つテーブルがあります。Gocqlカスタムマーシャラー

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

と私は、現在のようなCQL文を使用してフィールドを設定することができます。

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

と私は引数として2つの変数、int64gocql.UUIDを渡します。

代わりにどこにでも周りの2つの変数を移動するので、私は構造体にこれらを入れたい、

type MyID struct { 
    id int64 
    uid gocql.UUID 
} 

のようなもの、その後UPDATEステートメントにこれらを渡すためにMarshallerを使用しています。

これは可能ですか?私はタプルフィールドの単一の変数を渡すことができるかどうかはわかりません。もしそうなら、どうしたらいいですか?私はどのように把握することはできません - あなたが述べたように、私はhttps://github.com/gocql/gocql/blob/master/marshal_test.go#L935を模倣しようとしていたが、私は、私は構造体のフィールドを設定することができないエラーを取得しています(cannot refer to unexported field or method proto

+1

エラーは、エクスポートされていない変数やメソッドを別のパッケージから使用しようとしているためです(つまり、大文字で始まらない)。しかし、これの横に、私は助けることができないので、私はcqlを知らない。 'proto'の代わりに' Proto'を書くことはあなたの問題を解決するかもしれません。 – AkiRoss

答えて

1

は、次のエラーを取得しています

cannot refer to unexported field or method proto

これは、struct内のフィールドをエクスポートする必要があることを意味します。これは、Goで大文字で始まることを意味します。したがって、構造体は:

type MyID struct { 
    Id int64 
    Uid gocql.UUID 
} 

である必要があります。

+0

そうですね、これをサポートするためにgocqlのlibにアップデートが必要だと思います。 –

+0

ええと、まあいいえ:)私はgocqlがこれについて何でもできるとは思わない。これは、あなたのクラスにパブリックセッターメソッドとゲッターメソッドが必要なHibernateによく似ています。したがって、_YOU_は大文字で構造体フィールドの最初の文字を作る必要があります。大文字を使用する_THE_あなたの構造体を外部コードで使用可能にする方法です、と私はこれを回避する方法はないと思う。 –

関連する問題