2015-06-25 17 views
16

Poiché la stringa vuota è il valore zero/predefinito per Golang string, ho deciso di definire tutti i campi come interface{}. per esempioAssegnazione di campi null a JSON invece di stringhe vuote in Golang

type student struct { 
    FirstName interface{} `json:"first_name"` 
    MiddleName interface{} `json:"middle_name"` 
    LastName interface{} `json:"last_name"` 
} 

L'applicazione vi mando i miei dati si aspettano un valore nullo, invece di una stringa vuota se il valore non è disponibile per tale specifico settore.

È questo l'approccio corretto o qualcuno può per favore indicarmi qualcosa di meglio di questo.

+1

uso 'JSON: null' –

+3

Come su un puntatore: '* stringa'? Anche correlati: [Come rappresento una stringa facoltativa in Go?] (Http://stackoverflow.com/questions/30731687/how-do-i-represent-an-optional-string-in-go) – icza

+0

@AryehArmon potrebbe fornisci un link ai documenti in cui viene specificato quel tag? Non riesco a trovarlo. – thwd

risposta

30

In json package documentation:

valori puntatore codificare il valore puntato. Un puntatore nullo codifica come oggetto JSON null.

in modo da poter memorizzare un puntatore ad una stringa che sarà codificato come una stringa, se non pari a zero e sarà codificato come "null" se nil

type student struct { 
    FirstName *string `json:"first_name"` 
    MiddleName *string `json:"middle_name"` 
    LastName *string `json:"last_name"` 
} 
+1

Ho provato questo approccio. Se questo approccio e l'interfaccia hanno qualche vantaggio l'uno sull'altro? – Prashant

+2

Direi leggibilità e coerenza. È chiaro che con il puntatore all'approccio a stringa si sa di cosa tratta la var. L'uso di un'interfaccia dice al compilatore che FirstName può essere qualsiasi cosa e lascia spazio per errori – Asdine

Problemi correlati