在Golang中接受Cassandra的Set数据类型

I have a column in cassandra which is of type set. Usig gocql I want to accept that column in golang code.So while accepting what should be the datatype of the variable in which the entire set is accepted.

e.g:

err = session.Query("select product_list from category where category_id=?",key).Scan(&productIdList)

Product_list is of type set.So what should be the data type of productIdList in golang?

1个回答



看起来gocql默认使用切片或数组作为Cassandra的设置类型。</ p>

如果 那不是您想要的,它使您可以使用gocql.Marshaller和gocql.Unmarshaller接口定义自己的接口。</ p>

例如:</ p>

  type Set map [string] bool 

func(设置)UnmarshalCQL(信息TypeInfo,数据[] byte)错误{
/ 代码将您的集合解组到Go Map中。 来自cql结果 /
}

func(s集)MarshalCQL(info TypeInfo)([] byte,错误){
/ 代码从go map中将您的集合封送给cql使用 / \ n}
</ code> </ pre>

但是这确实意味着您必须自己编写用于解析的set输出。</ p>
</ div>

展开原文

原文

It looks like gocql uses a slice or array by default for Cassandra's set type.

If that's not what you want it does let you define one of your own using the gocql.Marshaller and gocql.Unmarshaller interfaces.

So for example:

type Set map[string]bool

func (s Set) UnmarshalCQL(info TypeInfo, data []byte) error {
  /* code to unmarshal your set into a Go map. from cql results */
}

func (s Set) MarshalCQL(info TypeInfo) ([]byte, error) {
  /* code to marshal your set out of a go map for cql to use */
}

This does however mean that you'll have to write the set output parsing yourself.

duankeng9477
duankeng9477 如果您不知道前面的大小,也许切片是更好的选择。 切片可以调整大小,而数组则不能。
6 年多之前 回复
duanhuihui2705
duanhuihui2705 我用数组来存储集合类型。
6 年多之前 回复
dongyou5068
dongyou5068 根据您的建议,我正在尝试将其放入数组中。 但这给了我“ unmarshal列表:大小错误的数组”错误。 我已初始化为“ var productIdList [10] string”。请您告诉我有什么问题吗? 例如product_list的值为{'9970GBBHVOB61','9970GBBHVOB62','9970GBBHVOB6O'},并且此值一直在变化,因此应如何设置数组的大小。
6 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问