web-dev-qa-db-ja.com

複合リテラルはキーなしフィールドを使用します

Golang用の新しい公式mongodbドライバーを使用しています。 mongo dbにデータを挿入し、要素の値に従って並べ替える複雑なクエリを1つ作成しました。私は使用してbsonタイプを作成したフィルターを使用しています:-

filter := bson.D{{"autorefid", "100"}}

しかし、それは言っている警告を示しています:

プリミティブ.E複合リテラルはキーなしフィールドを使用します

警告は私のコードに混乱を引き起こしています。

23
Himanshu

警告は、チェックフラグをfalseに設定することで停止できます。

$ go doc cmd/vet

デフォルトでは、すべてのチェックが実行されます。フラグが明示的にtrueに設定されている場合、それらのテストのみが実行されます。逆に、いずれかのフラグが明示的にfalseに設定されている場合、それらのテストのみが無効になります。したがって、-printf = trueはprintfチェックを実行し、-printf = falseはprintfチェックを除くすべてのチェックを実行します。

Unkeyed composite literals

Flag: -composites

Composite struct literals that do not use the field-keyed syntax.

しかし、警告はprimitive.E構造体に値を設定するときにキー名を提供しないためです。

primitive.E構造体にキーを設定すると、警告メッセージが削除されます。例えば

filter := bson.D{primitive.E{Key: "autorefid", Value: "100"}}

パッケージプリミティブには、BSONタイプのGoプリミティブに類似したタイプが含まれていますが、直接Goプリミティブ表現を持つことはできません。

type E struct {
    Key   string
    Value interface{}
}

EはDのBSON要素を表します。通常、Dの内部で使用されます。

詳細については、 primitive.E を参照してください。

36
Himanshu

あなたは変えられる:

filter := bson.D{{"autorefid", "100"}}

に:

filter := bson.D{primitive.E{Key: "autorefid", Value: "100"}}
5
dbam