2015-02-23 54 views
0

我正在使用Go應用程序,在該應用程序中,我有一個實體,其中包含一個包含隨機字符串的識別標記的屬性。我保存這個屬性作爲字節字符串,在我的開發環境,我已經能夠查詢使用形式的過濾器這個屬性: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字節以下的較短數量的二進制數據。

我第一次切換到使用基於第二答案這太問題的字節字符串類型:Golang - Appengine datastore filter query with []byte comparison

+0

你能確認'len(token)'不大於'500'嗎?你使用的是什麼版本的Go SDK? 1.2或1.4beta?如果後者在你的'app.yaml'配置文件中指定了'api_version:go1.4beta'? – icza 2015-02-24 06:19:44

+0

是的,我自己生成令牌,他們是64字節長。這個錯誤實際上甚至在數據庫中根本沒有實體時發生,所以它似乎與任何實體的上下文無關。我只將api版本指定爲'api_version:go1'。你知道版本之間的區別在哪裏嗎? – Aaron 2015-02-24 16:43:21

+0

我在GAE Go運行時環境中發現了以下注釋:https://code.google.com/p/googleappengine/wiki/SdkForGoReleaseNotes在版本1.9.11支持狀態中添加了「ByteString」,註釋:「添加'ByteString'類型以允許短索引字節片。「我確認我的代碼是通過調用'appengine.ServerSoftware()'在'Google App Engine/1.9.18'上運行的。我不確定如何查看應用程序運行的版本,但似乎Go版本應該與通過API提供的應用程序引擎功能正交 – Aaron 2015-02-24 16:58:54

回答

0

這個問題自行解決大約一個星期以後。由於它只出現在模塊環境中,我猜測他們的某些代碼沒有被更新以支持ByteString類型,現在是。現在很好用!