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
你能確認'len(token)'不大於'500'嗎?你使用的是什麼版本的Go SDK? 1.2或1.4beta?如果後者在你的'app.yaml'配置文件中指定了'api_version:go1.4beta'? – icza 2015-02-24 06:19:44
是的,我自己生成令牌,他們是64字節長。這個錯誤實際上甚至在數據庫中根本沒有實體時發生,所以它似乎與任何實體的上下文無關。我只將api版本指定爲'api_version:go1'。你知道版本之間的區別在哪裏嗎? – Aaron 2015-02-24 16:43:21
我在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