3

値の中に整数値を含むコレクションをクエリし、結果のドキュメントをこの構造体にロードしています。

type Subscription struct {
    Id bson.ObjectId "_id,omitempty"
    Listen string
    Job string
    TimeoutSeconds int
    Data string
}


var subscription Subscription

subscriptions := subscriptionsCol.Find(bson.M{"listen": "example_channel"}).Iter()
for subscriptions.Next(&subscription) {
    log("Pending job: %s?%s (timeout: %d)\n",
            subscription.Job, 
            subscription.Data, 
            subscription.TimeoutSeconds)
}

これはphpMoAdminが私に示すものです:

[_id] => MongoId Object (
    [$id] => 502ed8d84eaead30a1351ea7
)
[job] => partus_test_job_a
[TimeoutSeconds] => 30
[listen] => partus.test
[data] => a=1&b=9

コレクションに挿入したドキュメントにsubscription.TimeoutSeconds私が肯定的であるとき、それは常に0 を含むことを私に困惑させます。30

他のすべての値は正常に取得されます。

int型の何が問題になっていますか?

4

2 に答える 2

4

そのフィールドの「キー」値を設定しようとしましたか?

アンマーシャル

小文字のフィールド名は、エクスポートされた各フィールドのキーとして使用されますが、この動作はそれぞれのフィールド タグを使用して変更できます。

type Subscription struct {
    Id              bson.ObjectId    "_id,omitempty"
    Listen          string
    Job             string
    TimeoutSeconds  int     "TimeoutSeconds"
    Data            string
}

TimeoutSecondsTitleCase を使用しているのに対し、小文字の値がコレクション内の Mongo フィールドと一致するため、他のフィールドは正常に機能しています。何が起こっているのかというと、 int フィールドはUnmarshalフィールドをマップできないため、ゼロ値のままになっています。

于 2012-08-18T01:25:46.557 に答える