Saltar al contenido

Campos de estructura vacíos o no obligatorios en golang

Solución:

tl; dr: Usar ,omitempty, y si necesita preocuparse por la diferencia entre un valor cero y nulo / no especificado, haga lo que hace la API de GitHub y use un puntero.


Ambos json y bson apoyen el ,omitempty etiqueta. Para json, “los valores vacíos son falsos, 0, cualquier puntero nulo o valor de interfaz, y cualquier matriz, sector, mapa, o cuerda de longitud cero “(json docs). Para bson, ,omitempty significa “Incluir el campo solo si no está establecido en el valor cero para el tipo o en sectores o mapas vacíos”, y los valores cero incluyen cadenas vacías y punteros nulos (bson docs).

Entonces, si realmente necesita una estructura de grupo, puede poner una *Group en su lugar, y no se almacenará cuando el puntero sea nulo. Si Investment solo necesita sostener el grupo nombre, es aún más simple: "" ya que el nombre del grupo evita que se almacene una clave de grupo.

bson por defecto ya usa el nombre del campo en minúsculas para que pueda omitirlo de la etiqueta struct cuando coincidan. json por defecto, el nombre en mayúsculas, así que especifique el nombre en minúsculas en una etiqueta si necesita minúsculas.

Entonces, en el mejor de los casos, tal vez puedas usar:

type Investment struct {
    Base
    Symbol string `json:"symbol" binding:"required"`
    Group string  `json:"group,omitempty" bson:",omitempty"`
    Fields bson.M `json:"fields"`
}

Si alguna vez se encuentra con campos donde el valor cero para el tipo (“”, 0, falso, etc.) es distinto de “no especificado”, puede hacer lo que hace la API de GitHub y poner punteros en sus estructuras, esencialmente un extensión de la *Group truco.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *