ANNOUNCEMENT: Voyage AI joins MongoDB to power more accurate and trustworthy AI applications on Atlas.
Learn more
Docs Menu

ベストプラクティス

Atlas Go SDK を使用する場合は、次のベストプラクティスに従ってください。

応答にアクセスするときは、フィールドに直接アクセスするのではなく、getter 関数を使用します。

たとえば、response.GetField() response.Fieldではなく を使用します。

getter 関数を使用するとシームレスなポインター処理が可能になり、エラーを防ぐことができます。 さらに、Atlas Go SDK は、安全なフィールド変更のためのSetIsSetUnsetメソッドを提供します。

モデルにstring へのポインターが含まれている場合、空のAtlasGo string("" )に設定されている場合でも、 SDK はその値をサーバーに送信します。

直接割り当てではなく、

// Surrounding code omitted for brevity
test := ""
requestBody.StringPointerValue = test

ユーザーは、空の文字列を割り当てる前に常に空の文字列を確認する必要があります。

// Surrounding code omitted for brevity
if test != ""
requestBody.StringPointerValue = test

Atlas Go SDK では、 *time.Time型は時間関連データを処理する日付フィールドを表します。 time.Timeに基づいて値を比較する場合、ポインターを直接比較しないか、次の操作を行います。

  • 等価性を確認するために、直接比較演算子(例: myStruct.MyDateField == "" )を使用することは避けてください。 ポインターを直接比較すると、実際の日付値を比較するのではなく、同じメモリ アドレスを参照しているかどうかが確認されます。 各time.Timeインスタンスは異なるメモリに割り当てられているため、直接比較すると予期しない結果が生じる可能性があります。

  • nil 以外のポインターをチェックするには、 Has関数を使用します。SDK は各モデル専用のHasFieldNameまたはGetFieldName関数を提供しており、 time.Timeポインターが nil 以外であるかどうかをその値にアクセスする前に確認できます。 操作を実行する前には、必ずこの関数を使用して、ポインターが有効であることを確認してください。

  • 日付値を比較するには、 time.Timeメソッドを使用します。 time.Time pointerが nil 以外であることを確認したら、 time.Timeメソッドを使用して実際の日付値を安全に比較できます。 比較に一般的に使用される方法には、 BeforeAfterEqualがあります。

// Surrounding code omitted for brevity
if !sdkModel.HasSomeDateField() {
return;
}
datePtr1 := sdkModel.SomeDateField;
if datePtr1.Before(*datePtr2) {
// datePtr1 is before datePtr2.
} else if datePtr1.After(*datePtr2) {
// datePtr1 is after datePtr2.
} else {
// datePtr1 and datePtr2 are equal.
}

Atlas Go SDK は、モデルとパラメーターでGo ìnterface{} 型の信頼できるオブジェクトを表します。 無料形式オブジェクトには、あらゆる形状のオブジェクトが含まれます。

Go ìnterface{} 型では、次の型を入力引数として使用できます。

  • 基本型(整数、ブール値)

  • 独自の構造

  • 任意(無料形式オブジェクトの場合)

注:Atlas Go SDK は、モデルが複数の競合する値を処理する必要がある場合にのみ無料形式オブジェクトを使用します。 たとえば、既存の Atlas Search API の一部では、ブール値やオブジェクトを指定できます。

Atlas Go SDK は、SDK ポインターを使用して、Go プログラミング言語の任意の値を示します。

// Surrounding code omitted for brevity
type Data struct {
// Represents an optional name
Name *string `json:"results,omitempty"`
}

上記の例では、string の値は任意であり、明示的に設定しないとサーバーに送信されません。

Atlas Go SDK はすべての配列をポインターとして表します。

// Surrounding code omitted for brevity
type Data struct {
Results *[]DataRole `json:"results,omitempty"`
}

次のシナリオでは、配列を持つポインターを使用します。

  • 空の配列を含むリクエストを更新( フィールド値のリセット)

構造体プロパティを空の配列に明示的に設定すると、SDK は空の配列リクエストを Atlas API に送信します。

// Surrounding code omitted for brevity
data := Data{
// Sending an empty array
Results: &[]DataRole{}
}
  • 以下のように、配列フィールドを更新せずにリクエストを更新します。

アップデート操作を実行するときは、 struct プロパティを設定しないことをお勧めします。

// Surrounding code omitted for brevity
data := Data{
// Sending an empty array by not setting field values (value is nil)
// Results: &[]DataRole{}
}

これらのプラクティスにより、 Goでポインターを操作するときに、SDK で任意の値と配列の更新を正確に処理できるようになります。

Atlas Go SDK では、API を使用してバイナリ データを返すのにio.ReadCloser型が使用されます。

  • ファイルに保存したり、別のストリームを渡したりするには、 io.Copyを使用します。

  • メモリ内のすべてのバイトを読み取るには、 io.ReadAllを使用します。

  • データを読み込んだ後、 .Close()関数を呼び出す

注: 例/ダウンロード/ダウンロードログ の 例 を参照してください。

新しいモデルの作成には専用のメソッドを使用します。

たとえば、代わりに次のようなものを使用します。

// Surrounding code omitted for brevity
GroupInvitationUpdateRequest{
...
}

次の専用メソッドを使用します。

// Surrounding code omitted for brevity
admin.NewGroupInvitationUpdateRequest(...)

golangci-lint の 使用 Atlas Go SDK を使用するときに一般的なエラーを検出するには、 を使用します。Atlas Go SDK は独自のコネクターを提供しません。

Atlas Go SDK やその他のライブラリでは多数の誤検知が報告されるため、 bodycloseルールの使用は推奨されません。

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