Menu Docs
Página inicial do Docs
/
MongoDB Atlas
/ / /

Melhores práticas

Siga estas melhores práticas ao usar o Atlas Go SDK.

Ao acessar respostas, use a função de getter em vez do acesso direto ao campo.

Por exemplo, use response.GetField() em vez de response.Field.

O uso de funções de getter permite o manuseio contínuo do ponteiro e pode ajudar a evitar erros de Pingback. Além disso, o SDK do Atlas Go fornece métodos Set , IsSet e Unset para modificações de campo seguras.

Quando um modelo contém um ponteiro para um string , o Atlas Go SDK envia esse valor para o servidor, mesmo que esteja definido para uma string vazia ( "" ).

Em vez de atribuição direta:

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

Os usuários devem sempre verificar se há strings vazias antes de atribuí-las:

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

No Atlas Go SDK, o tipo *time.Time representa campos de data para lidar com dados relacionados ao tempo. Quando você compara valores com base em time.Time , nunca compare ponteiros diretamente ou faça o seguinte:

  • Evite usar operadores de comparação direta (por exemplo, myStruct.MyDateField == "" ) para verificar a igualdade. A comparação direta dos ponteiros verificará se eles se referem ao mesmo endereço de memória, em vez de comparar os valores de data reais. Como cada instância time.Time é alocada em diferentes locais de memória, comparações diretas podem produzir resultados inesperados.

  • Use a função Has para verificar ponteiros não nulos: O SDK fornece uma função HasFieldName ou GetFieldName dedicada para cada modelo para verificar se um ponteiro time.Time não é nulo antes de acessar seu valor. Sempre use esta função para garantir que o ponteiro seja válido antes de executar quaisquer operações.

  • Use métodos time.Time para comparar valores de datas: Depois de confirmar que time.Time pointer não é nulo, você pode usar com segurança os métodos time.Time para comparar os valores de data reais. Os métodos comumente usados para comparação incluem Before , After e Equal :

// 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.
}

O Atlas Go SDK representa objetos de formato livre com o tipo Go ìnterface{} em modelos e parâmetros. Objetos de forma livre incluem objetos de qualquer forma.

O tipo Go ìnterface{} permite utilizar os seguintes tipos como argumentos de entrada:

  • Tipos básicos (inteiro, booleano)

  • Suas próprias estruturas

  • map[string]interface para objetos de forma livre

OBSERVAÇÃO: o Atlas Go SDK usa objetos de formato livre somente quando os modelos precisam lidar com vários valores conflitantes. Por exemplo, algumas das APIs do Atlas Search existentes permitem fornecer booleanos ou objetos.

O Atlas Go SDK utiliza ponteiros do SDK para denotar valores opcionais na linguagem de programação Go:

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

No exemplo acima, o valor da string é opcional e não será enviado ao servidor se você não defini-lo explicitamente.

O Atlas Go SDK representa todas as arrays como ponteiros:

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

Os cenários a seguir usam ponteiros com arrays:

  • Atualizar uma solicitação contendo uma matriz vazia (redefinindo os valores do campo):

Se você definir explicitamente uma propriedade struct como uma array vazia, o SDK enviará uma solicitação de array vazia para a API do Atlas.

// Surrounding code omitted for brevity
data := Data{
// Sending an empty array
Results: &[]DataRole{}
}
  • Atualizar uma solicitação sem atualizar o campo de array:

Ao executar uma operação de atualização, recomendamos que você não defina a propriedade struct.

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

Essas práticas garantem o tratamento preciso de valores opcionais e atualizações de array no SDK quando você trabalha com ponteiros no Go.

No Atlas Go SDK, o tipo io.ReadCloser é usado para retornar dados binários usando as API.

  • Use io.Copy para armazenar em um arquivo ou passar por outro stream.

  • Use io.ReadAll para ler todos os bytes na memória.

  • Chame a função .Close() após ler os dados

Observação: consulte exemplo em Examples/download/downloadLogs.go

Use métodos dedicados para criar novos modelos.

Por exemplo, em vez de usar o seguinte:

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

Use o seguinte método dedicado:

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

Usar golangci-lint para detectar erros comuns ao utilizar o Atlas Go SDK. O Atlas Go SDK não fornece seu próprio linter.

Não recomendamos usar a regra bodyclose , pois ela relata muitos falsos positivos com o Atlas Go SDK e outras bibliotecas.

Para saber mais,consulte bodyclose.

Voltar

Migração