Docs Menu
Docs Home
/ /

Mejores prácticas

Sigue estas mejores prácticas cuando utilices el Atlas Go SDK.

Al acceder a las respuestas, utilice la función getter en lugar del acceso directo al campo.

Por ejemplo, utilice response.GetField() en lugar de response.Field.

El uso de funciones getter permite una gestión fluida de punteros y puede ayudar a prevenir errores de pánico. Además, el SDK de Atlas Go proporciona los métodos Set , IsSet y Unset para modificaciones de campos seguras.

Cuando un modelo contiene un puntero a un string , el SDK Atlas Go envía ese valor al servidor, incluso si está configurado como una cadena vacía ( "" ).

En lugar de asignación directa:

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

Los usuarios siempre deben comprobar si hay cadenas vacías antes de asignarlas:

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

En el SDK de Atlas Go, el tipo *time.Time representa campos de fecha para gestionar datos relacionados con el tiempo. Al comparar valores basados ​​en time.Time , nunca compare punteros directamente o haga lo siguiente:

  • Evite usar operadores de comparación directa (p. ej., myStruct.MyDateField == "" ) para comprobar la igualdad. Comparar punteros directamente comprobará si hacen referencia a la misma dirección de memoria, en lugar de comparar los valores de fecha reales. Dado que cada instancia de time.Time se asigna a diferentes ubicaciones de memoria, las comparaciones directas podrían producir resultados inesperados.

  • Utilice la función Has para comprobar punteros no nulos: El SDK proporciona una función HasFieldName o GetFieldName dedicada para cada modelo que permite comprobar si un puntero time.Time es no nulo antes de acceder a su valor. Utilice siempre esta función para garantizar la validez del puntero antes de realizar cualquier operación.

  • Usar métodos time.Time para comparar valores de fecha: Una vez confirmado que time.Time pointer no es nulo, puede usar con seguridad métodos time.Time para comparar los valores de fecha reales. Los métodos de comparación más comunes son Before , After y 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.
}

El SDK de Atlas Go representa objetos de forma libre con el tipo golang ìnterface{} en modelos y parámetros. Los objetos de forma libre incluyen objetos de cualquier forma.

El tipo golang ìnterface{} le permite utilizar los siguientes tipos como argumentos de entrada:

  • Tipos básicos (entero, booleano)

  • Tus propias estructuras

  • cualquiera para objetos de forma libre

NOTA: El SDK de Atlas Go utiliza objetos de formato libre solo cuando los modelos necesitan gestionar múltiples valores conflictivos. Por ejemplo, algunas API de búsqueda de MongoDB permiten proporcionar valores booleanos u objetos.

El SDK de Atlas Go utiliza punteros SDK para indicar valores opcionales en el lenguaje de programación Go:

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

En el ejemplo anterior, el valor de la cadena es opcional y no se enviará al servidor si no lo configura explícitamente.

El SDK Atlas Go representa todas las matrices como punteros:

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

Los siguientes escenarios utilizan punteros con matrices:

  • Actualizar una solicitud que contiene una matriz vacía (restableciendo los valores del campo):

Si establece explícitamente una propiedad de estructura en una matriz vacía, el SDK enviará una solicitud de matriz vacía a la API de Atlas.

// Surrounding code omitted for brevity
data := Data{
// Sending an empty array
Results: &[]DataRole{}
}
  • Actualizar una solicitud sin actualizar el campo de la matriz:

Al realizar una operación de actualización, le recomendamos que no configure la propiedad struct.

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

Estas prácticas garantizan el manejo correcto de valores opcionales y actualizaciones de arreglos en el SDK cuando trabajas con punteros en Golang.

En el SDK de Atlas Go, el tipo io.ReadCloser se utiliza para devolver datos binarios mediante las API.

  • Utilice io.Copy para almacenar en un archivo o pasar a través de otro Steam.

  • Utilice io.ReadAll para leer todos los bytes en la memoria.

  • Llama a la función .Close() después de leer los datos

Nota: ver ejemplo en ejemplos/descargar/downloadLogs.go

Utilice métodos dedicados para crear nuevos modelos.

Por ejemplo, en lugar de utilizar lo siguiente:

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

Utilice el siguiente método dedicado:

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

Utiliza golangci-lint para detectar errores comunes al utilizar el Atlas Go SDK. El Atlas Go SDK no proporciona su propio lint.

No recomendamos utilizar la regla bodyclose ya que informa muchos falsos positivos con Atlas GO SDK y otras bibliotecas.

Para obtener más información,consulte bodyclose.

Volver

Migración