我剛開始用Go運行時開發一個GAE應用程序,迄今爲止它是一種樂趣。但是,我遇到了以下的挫折:如何忽略datastore.Query.GetAll()中的錯誤?
我利用了數據存儲提供的靈活性,通過將具有不同屬性的幾個不同結構以相同的實體名稱(「項目」)進行保存。 Go language datastore reference指出「傳遞的實際類型不必在Get和Put調用之間或甚至跨不同的App Engine請求匹配」,因爲實體實際上只是一系列屬性,因此可以存儲在適當的容器類型中支持他們。
我需要查詢存儲在實體名稱「Item」下的所有實體,並將它們一次編碼爲JSON。使用該實體屬性靈活性對我有利,可以將查詢的實體存儲到任意datastore.PropertyList
中,但是,當查詢的實體的屬性不能被正確表示時(也就是說,當查詢的實體的屬性不能被正確表示時,Get
和GetAll
函數返回ErrFieldMismatch
作爲錯誤)不兼容的類型,或者只是缺少的值)。我保存的所有這些結構都是用戶生成的,大多數值都是可選的,因此將空值保存到數據存儲中。使用空值保存這些結構體時不會有任何問題(數據存儲區的靈活性),但是在檢索它們時有問題。
在數據存儲Go文檔中還聲明,由Get
方法的調用者決定由於空值返回的錯誤是可以忽略,可恢復的還是致命的。我想知道如何正確地做到這一點,因爲只是忽略這些錯誤是不夠的,因爲當查詢導致此錯誤時,我的查詢的目標結構(datastore.PropertyList
)根本沒有填充。
預先感謝您,對於冗長的問題感到抱歉。
更新:下面是一些代碼
query := datastore.NewQuery("Item") // here I use some Filter calls, as well as a Limit call and an Order call
items := make([]datastore.PropertyList, 0)
_, err := query.GetAll(context, &items) // context has been obviously defined before
if err != nil {
// something to handle the error, which in my case, it's printing it and setting the server status as 500
}
更新2:下面是一些輸出
如果我使用make([]datastore.PropertyList, 0)
,我得到這個:
datastore: invalid entity type
如果我使用make(datastore.PropertyList, 0)
,我得到這個:
datastore: cannot load field "Foo" into a "datastore.Property": no such struct field
而在這兩種情況下(第一個我認爲可以丟棄)在items
我得到這樣的:
[]
你可以分享一些代碼,顯示你目前如何調用'GetAll'? – proppy
當然!稍等一下。 – ArturoVM
@proppy完成了,我用代碼更新了問題。 – ArturoVM