亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

有沒有辦法在不使用自定義結構的情況下檢查實體?

有沒有辦法在不使用自定義結構的情況下檢查實體?

Go
素胚勾勒不出你 2023-04-04 14:17:26
struct datastore.Entity看起來非常有用,這就是我想要處理實體的方式,但我沒有看到任何使用它的 API。大多數函數(例如Get)都采用一個that 只有當它是結構與傳入數據一樣精確的interface{}結構時才似乎有效。// https://godoc.org/cloud.google.com/go/datastore#Client.Getctx := context.Background()client, err := datastore.NewClient(ctx, "project-id")if err != nil {    // TODO: Handle error.}type Article struct {    Title       string    Description string    Body        string `datastore:",noindex"`    Author      *datastore.Key    PublishedAt time.Time}key := datastore.NameKey("Article", "articled1", nil)article := &Article{}if err := client.Get(ctx, key, article); err != nil {    // TODO: Handle error.}我將如何以通用方式獲得該實體?如果我不完全了解結構怎么辦?(更具體地說,我如何獲得 instead 的實例datastore.Entity?)
查看完整描述

1 回答

?
翻翻過去那場雪

TA貢獻2065條經驗 獲得超14個贊

所以你想要一個可以容納任何類型實體的“通用”類型?該datastore軟件包已經為您提供了這樣一種類型:datastore.PropertyList.

這是您可以使用它的方式:

var entity datastore.PropertyList

if err := client.Get(ctx, key, &entity); err != nil {

? ? // TODO: Handle error.

}

相關文檔來自datastore

特性

實體的內容可以用多種類型表示。這些通常是結構指針,但也可以是實現 PropertyLoadSaver 接口的任何類型。如果使用結構指針,則不必顯式實現 PropertyLoadSaver 接口;數據存儲將通過反射自動轉換。如果結構指針確實實現了該接口,那么將優先使用這些方法而不是結構指針的默認行為。結構指針的類型更強,更易于使用;PropertyLoadSavers 更靈活。

所以你可以使用任何實現datastore.PropertyLoadSaver接口的類型。這個接口類型是:

type?PropertyLoadSaver?interface?{
????Load([]Property)?error
????Save()?([]Property,?error)
}

再次引用包文檔:

PropertyLoadSaver 接口

實體的內容也可以由實現 PropertyLoadSaver 接口的任何類型表示。此類型可以是結構指針,但不一定是。datastore包在獲取實體內容時調用Load,在放入實體內容時調用Save??赡艿挠猛景ㄅ缮谴鎯ψ侄?、驗證字段或僅在其值為正時索引字段。

[...]?*PropertyList 類型實現了 PropertyLoadSaver,因此可以保存任意實體的內容。


查看完整回答
反對 回復 2023-04-04
  • 1 回答
  • 0 關注
  • 147 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號