Sigue estas mejores prácticas cuando utilices el Atlas Go SDK.
Uso de getters en lugar de acceso directo al campo
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.
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 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
Trabajar con campos de fecha
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 detime.Timese asigna a diferentes ubicaciones de memoria, las comparaciones directas podrían producir resultados inesperados.Utilice la función
Haspara comprobar punteros no nulos: El SDK proporciona una funciónHasFieldNameoGetFieldNamededicada para cada modelo que permite comprobar si un punterotime.Timees 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.Timepara comparar valores de fecha: Una vez confirmado quetime.Time pointerno es nulo, puede usar con seguridad métodostime.Timepara comparar los valores de fecha reales. Los métodos de comparación más comunes sonBefore,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 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.
Trabajar con punteros
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.
Trabajar con matrices
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.
Trabajar con respuestas binarias
En el SDK de Atlas Go, 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
Utilice el método para crear modelos
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(...)
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 pelusa
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.