Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
MongoDB Branding Shape
Click here >
Docs Menu

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, use 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 de Atlas Go envía ese valor al servidor, incluso si está configurado como una string vacía ( "" ).

En vez de la asignación directa:

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

Los usuarios siempre deben verificar las 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 los objetos de forma libre con el tipo de 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 Atlas Go SDK utiliza objetos de formato libre sólo donde los modelos necesitan gestionar múltiples valores conflictivos. Por ejemplo, algunas de las API existentes de MongoDB Search te permiten suministrar 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 string es opcional y no se enviará al servidor si no lo configuras 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 arreglos:

  • 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{}
}
  • Actualiza una solicitud sin actualizar el campo de arreglo:

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.

  • Utiliza io.Copy para almacenar en un archivo o pasar por otro flujo.

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

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

Nota: consulta el ejemplo en examples/download/downloadLogs.go

Utilice métodos dedicados para crear nuevos modelos.

Por ejemplo, en vez de usar lo siguiente:

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

Use 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 aprender más, consulta bodyclose.