Sigue estas mejores prácticas cuando utilices el Atlas Go SDK.
Uso de getters en lugar de acceso directo a campos
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.
Comprobar cadenas vacías para punteros de cadena
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
Trabajar con campos de fecha
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 detime.Timese asigna en diferentes ubicaciones de memoria, las comparaciones directas pueden arrojar resultados inesperados.Utiliza la función
Haspara comprobar punteros no nulos: El SDK proporciona una función dedicadaHasFieldNameoGetFieldNamepara cada modelo para comprobar si un punterotime.Timeno 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.Timepara comparar valores de fecha: cuando hayas confirmado que eltime.Time pointerno es nulo, puedes utilizar de manera segura los métodostime.Timepara comparar los valores reales de las fechas. Los métodos comúnmente utilizados para la comparación incluyenBefore,AfteryEqual:
// 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. }
Trabajar con objetos
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.
Trabajar con punteros
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.
Trabajar con arreglos
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.
Trabajando con respuestas binarias
En el Atlas Go SDK, el tipo io.ReadCloser se utiliza para devolver datos binarios mediante las API.
Utilice
io.Copypara almacenar en un archivo o pasar a través de otro Steam.Utilice
io.ReadAllpara 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
Método de uso para la creación de modelos
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(...)
Use golangci-lint Validators
Utiliza golangci-lint para detectar errores comunes al utilizar el Atlas Go SDK. El Atlas Go SDK no proporciona su propio lint.
Problemas de Linting
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.