2 回答

TA貢獻(xiàn)1789條經(jīng)驗 獲得超8個贊
bson.Raw在編組和解組時都用作值。
要將 aninterface{}轉(zhuǎn)換為 a bson.Raw,首先要做的是對其進(jìn)行編組,以便獲得表示正在編組的任何內(nèi)容的純文檔數(shù)據(jù):
var value interface{} = bson.M{"some": "value"}
data, err := bson.Marshal(value)
if err != nil {
log.Fatal(err)
}
然后它可能有一個或多個字段解組為bson.Raw值:
var doc struct{ Some bson.Raw }
err = bson.Unmarshal(data, &doc)
if err != nil {
log.Fatal(err)
}
甚至整個文檔:
var doc bson.Raw
err = bson.Unmarshal(data, &doc)
if err != nil {
log.Fatal(err)
}
如果您想要整個文檔而不僅僅是一個字段,您還可以使用此快捷方式:
doc := bson.Raw{3, data}
3 常量代表bson 規(guī)范中的一個文檔,它當(dāng)然必須匹配提供的數(shù)據(jù)。由于 BSON 只支持頂層文檔,我們知道這一定是正確的。

TA貢獻(xiàn)1806條經(jīng)驗 獲得超5個贊
我相信 bson.Raw 旨在用作變量的類型。
例如:(在玩)
type Bar struct {
AnInt int
AString bson.Raw
}
“AString”字段將保留為您的鏈接提到的 bson.Raw 結(jié)構(gòu)。
如果您想部分解碼嵌套結(jié)構(gòu)的頂層以找出其實際類型,這將非常有用,以便您可以將其余部分解析為正確的數(shù)據(jù)類型。
請注意,以上內(nèi)容未經(jīng)測試,不在我目前可以實際運行的機(jī)器前。這是基于它像標(biāo)準(zhǔn) encoding/json 包一樣工作的假設(shè)。
- 2 回答
- 0 關(guān)注
- 297 瀏覽
添加回答
舉報