Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Mejores prácticas

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

Al acceder a respuestas, utiliza la función getter en vez de acceder directamente al campo.

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

Utilizar funciones "getter" permite un manejo sin interrupciones de punteros y puede ayudar a prevenir errores críticos (panic). Además, el SDK de Atlas Go proporciona métodos Set , IsSet y Unset para modificaciones seguras de campos.

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 vez de la 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 Atlas Go SDK, el tipo *time.Time representa campos de fecha para manejar datos relacionados con el tiempo. Cuando compare valores basados en time.Time , nunca compare punteros directamente o haga lo siguiente:

  • Evita utilizar operadores de comparación directa (por ejemplo, myStruct.MyDateField == "" ) para verificar la igualdad. Comparar punteros directamente verificará si se refieren a la misma dirección de memoria en lugar de comparar los valores reales de fecha. Dado que cada instancia de time.Time se asigna en diferentes ubicaciones de memoria, las comparaciones directas pueden arrojar resultados inesperados.

  • Utiliza la función Has para comprobar punteros no nulos: El SDK proporciona una función dedicada HasFieldName o GetFieldName para cada modelo para comprobar si un puntero time.Time no es nulo antes de acceder a su valor. Siempre utiliza esta función para asegurar que el puntero sea válido antes de realizar cualquier operación.

  • Utiliza métodos time.Time para comparar valores de fecha: cuando hayas confirmado que el time.Time pointer no es nulo, puedes utilizar de manera segura los métodos time.Time para comparar los valores reales de las fechas. Los métodos comúnmente utilizados para la comparación incluyen 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 ìnterface{} de golang te permite usar 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 Atlas Go SDK utiliza punteros de SDK para denotar 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 Atlas Go SDK representa todos los arreglos 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 contenga un arreglo vacío (restableciendo los valores de los campos):

Si configurás explícitamente una propiedad struct como un arreglo vacío, el SDK enviará una solicitud de arreglo vacío 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, te recomendamos que no establezcas 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 Atlas Go SDK, 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 vez de usar 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 usar la regla bodyclose ya que reporta muchos falsos positivos con Atlas GO SDK y otras librerías.

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

Volver

Migración