Docs Menu
Docs Home
/
MongoDB Atlas
/ / /

모범 사례

Atlas Go SDK를 사용할 때는 다음 권장사항을 따르세요.

응답에 액세스할 때 직접 필드 액세스 대신 게터 함수를 사용합니다.

예를 들어 대신 response.GetField() response.Field을(를) 사용하세요.

게터 함수를 사용하면 포인터를 원활하게 처리할 수 있고 패닉 오류를 방지할 수 있습니다. 또한 Atlas Go SDK는 안전한 필드 수정을 위해 Set , IsSetUnset 메서드를 제공합니다.

모델에 string 에 대한 포인터가 포함되어 있으면 빈 문자열( "" )로 설정되어 있더라도 Atlas Go 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 인스턴스는 서로 다른 메모리 위치에 할당되므로 직접 비교하면 예기치 않은 결과가 발생할 수 있습니다.

  • Has 함수를 사용하여 nil이 아닌 포인터 확인: SDK는 각 모델에 대한 전용 HasFieldName 또는 GetFieldName 함수를 제공하여 time.Time 포인터가 nil이 아닌 값에 액세스하기 전에 확인합니다. 작업을 수행하기 전에 항상 이 함수를 사용하여 포인터가 유효한지 확인하십시오.

  • time.Time 메서드를 사용하여 날짜 값 비교: time.Time pointer 가 nil이 아님을 확인한 경우 time.Time 메서드를 사용하여 실제 날짜 값을 안전하게 비교할 수 있습니다. 일반적으로 비교에 사용되는 메서드에는 Before , AfterEqual 가 포함됩니다.

// 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{} 유형을 사용하면 다음 유형을 입력 인수로 사용할 수 있습니다.

  • 기본 유형(정수, 부울)

  • 자체 구조

  • map[string]interface{} for free-form 객체

참고: 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"`
}

위 예제에서 문자열 값은 선택 사항이며 명시적으로 설정하지 않으면 서버로 전송되지 않습니다.

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{}
}
  • 배열 필드를 업데이트하지 않고 요청을 업데이트합니다:

업데이트 작업을 수행할 때는 구조체 속성을 설정하지 않는 것이 좋습니다.

// 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에서 io.ReadCloser 유형은 API를 사용하여 바이너리 데이터를 반환하는 데 사용됩니다.

  • io.Copy 를 사용하여 파일에 저장하거나 다른 stream을 통과합니다.

  • 메모리의 모든 바이트를 읽으려면 io.ReadAll 를 사용합니다.

  • 데이터를 읽은 후 .Close() 함수를 호출합니다.

참고: 예시 / 다운로드/downloadLogs.go를 참조하세요.

새 모델을 만들 때는 전용 메서드를 사용합니다.

예를 들어 다음을 사용하는 대신 다음과 같습니다.

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

다음 전용 메서드를 사용합니다:

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

golangci-lint 사용 Atlas 고 (Go) SDK를 사용할 때 일반적인 오류를 감지합니다. Atlas 고 (Go) SDK는 자체 린터를 제공하지 않습니다.

bodyclose 규칙은 Atlas GO SDK 및 기타 라이브러리에서 많은 오탐을 보고하므로 사용하지 않는 것이 좋습니다.

학습 내용은 bodyclose를 참조하세요.

돌아가기

마이그레이션