1 回答

TA貢獻(xiàn)2065條經(jīng)驗(yàn) 獲得超14個(gè)贊
所以你想要一個(gè)可以容納任何類型實(shí)體的“通用”類型?該datastore
軟件包已經(jīng)為您提供了這樣一種類型:datastore.PropertyList
.
這是您可以使用它的方式:
var entity datastore.PropertyList
if err := client.Get(ctx, key, &entity); err != nil {
? ? // TODO: Handle error.
}
相關(guān)文檔來自datastore
:
特性
實(shí)體的內(nèi)容可以用多種類型表示。這些通常是結(jié)構(gòu)指針,但也可以是實(shí)現(xiàn) PropertyLoadSaver 接口的任何類型。如果使用結(jié)構(gòu)指針,則不必顯式實(shí)現(xiàn) PropertyLoadSaver 接口;數(shù)據(jù)存儲(chǔ)將通過反射自動(dòng)轉(zhuǎn)換。如果結(jié)構(gòu)指針確實(shí)實(shí)現(xiàn)了該接口,那么將優(yōu)先使用這些方法而不是結(jié)構(gòu)指針的默認(rèn)行為。結(jié)構(gòu)指針的類型更強(qiáng),更易于使用;PropertyLoadSavers 更靈活。
所以你可以使用任何實(shí)現(xiàn)datastore.PropertyLoadSaver
接口的類型。這個(gè)接口類型是:
type?PropertyLoadSaver?interface?{ ????Load([]Property)?error ????Save()?([]Property,?error) }
再次引用包文檔:
PropertyLoadSaver 接口
實(shí)體的內(nèi)容也可以由實(shí)現(xiàn) PropertyLoadSaver 接口的任何類型表示。此類型可以是結(jié)構(gòu)指針,但不一定是。datastore包在獲取實(shí)體內(nèi)容時(shí)調(diào)用Load,在放入實(shí)體內(nèi)容時(shí)調(diào)用Save。可能的用途包括派生非存儲(chǔ)字段、驗(yàn)證字段或僅在其值為正時(shí)索引字段。
[...]?*PropertyList 類型實(shí)現(xiàn)了 PropertyLoadSaver,因此可以保存任意實(shí)體的內(nèi)容。
- 1 回答
- 0 關(guān)注
- 145 瀏覽
添加回答
舉報(bào)