2015-02-23 4 views
0

Я работаю над приложением Go, в котором у меня есть Entity с свойством, которое содержит идентификационный токен, который представляет собой случайную строку байтов. Я храню это свойство в виде байтовой строки, и в моей среде разработки я был в состоянии запросить для этого свойства, используя фильтр вида:Ошибка Google App Engine - запрос ByteString

// token is a []byte 
idTok := datastore.ByteString(token) 
q := ds.NewQuery("Entity").Filter("IDToken =", idTok) 

var entities []Entity 
keys, err := q.GetAll(c, &entities) 

Но, к сожалению, когда развернута в качестве модуля для GAE, этот запрос возвращает ошибку: datastore: bad query filter value type: unsupported datastore value type: datastore.ByteString, что сбивает с толку, поскольку я думал, что целью типа ByteString является возможность индексировать более короткие суммы двоичных данных под 500 байтами.

Я первый перешел к использованию типа байтовой строки на основе второго ответа на этот вопрос SO: Golang - Appengine datastore filter query with []byte comparison

+0

Можете ли вы подтвердить, что 'len (токен)' не больше 500? Какую версию Go SDK вы используете? 1,2 или 1,4beta? Если последний, в вашем конфигурационном файле 'app.yaml' вы указали' api_version: go1.4beta'? – icza

+0

Да, я сам генерирую токены, и они имеют длину 64 байта. Ошибка на самом деле даже возникает, когда в базе данных вообще нет сущностей, поэтому она, по-видимому, не связана с контекстом какого-либо объекта. У меня только версия api, указанная как api_version: go1'. Вы знаете, где описаны различия между версиями? – Aaron

+0

Я нашел версию, отмеченную для среды выполнения GAE Go здесь: https://code.google.com/p/googleappengine/wiki/SdkForGoReleaseNotes, которые указаны в версии 1.9.11, была добавлена ​​поддержка для 'ByteString', с примечанием: Добавьте 'ByteString' тип, чтобы разрешить короткие индексируемые байтовые фрагменты." Я подтвердил, что мой код работает в Google App Engine/1.9.18' с вызовом 'appengine.ServerSoftware()'. Я не уверен, как посмотреть, какая версия приложения Go работает, но похоже, что версия Go должна быть ортогональной функциональности движка приложения, предоставляемой через API – Aaron

ответ

0

Этого вопрос разрешился примерно через неделю. Поскольку он появился только в среде модуля, я предполагаю, что часть их кода не была обновлена ​​для поддержки типа ByteString, и теперь это так. Прекрасно работает!

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