2016-05-12 2 views
1

У меня есть таблица со столбцом кортежа, которая состоит из int64 в паре с UUID:Gocql пользовательского маршаллер

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 заявление.

Возможно ли это? Я не уверен, могу ли я передать одну переменную для поля tuple. Если да, то как я могу это сделать? Я не могу понять, как - я пытался имитировать 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

Это означает, что вам нужно экспортировать свои поля внутри структуры, а это значит, что начинается с заглавной буквы в Go. Таким образом, ваша структура должна быть:

type MyID struct { 
    Id int64 
    Uid gocql.UUID 
} 

Тогда оно должно работать.

+0

Да, поэтому я думаю, что gocql lib нуждается в обновлении, чтобы поддержать это. –

+0

Ум, ну нет :) Я не думаю, что gocql может что-то предпринять. Это больше похоже на Hibernate, требующий, чтобы ваши классы имели общедоступные методы настройки и получения. Итак, _YOU_ нужно сделать первые буквы ваших полей структуры заглавными буквами. Использование заглавных букв - это _THE_ путь, который вы делаете своей структурой применимой с помощью внешнего кода, и я не думаю, что любой такой подход существует. –

Смежные вопросы